Mik*_*e A 2 php api curl gitlab
我正在尝试使用 Gitlab API 从存储库子目录获取存储库内容列表。
由于顶级访问工作正常,我假设问题不是授权或一般方法,而是为子目录传递的 URL 和参数。或者,这可能是 Gitlab API 已记录但未实现的功能。
例如,使用 PHP 和curl GET,以下 URL 适用于文件和文件夹的顶级列表:
API 文档说:
GET /projects/:id/repository/tree
Run Code Online (Sandbox Code Playgroud)
这个 URL 与curl GET 函数一起工作正常:
https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree
Run Code Online (Sandbox Code Playgroud)
(我在另一个 gitlab 线程中找到了带有 %2F 的 USERNAME%2FPROJECTNAME 。这似乎是文档中 ID 的含义)
为了澄清起见,顶级内容列表的工作代码片段是:
$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree";
$ch = curl_init($url);
Run Code Online (Sandbox Code Playgroud)
因此,对于子目录访问,API 文档列出了参数:
id (必需)- 项目
路径的 ID (可选)- 存储库内的路径。用于获取子目录的内容
ref_name(可选) - 存储库分支或标签的名称,或者如果没有给出默认分支
因此,基于此,我尝试了以下各项作为上面的curl_init命令的URL:
$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree?path=SUBDIRECTORY";
Run Code Online (Sandbox Code Playgroud)
这将返回一个空字符串。为了防止我遗漏了什么,我还尝试了以下各项:
$params = array( 'path' => SUBDIRECTORY);
$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree . "?" . http_build_query($params);
$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree . "?" . urlencode(http_build_query($params));
$url = "https://gitlab.com/api/v3/projects/USERNAME%2FPROJECTNAME/repository/tree . "%3F" . urlencode(http_build_query($params));
Run Code Online (Sandbox Code Playgroud)
但所有这些都从 Gitlab API 返回一个空字符串。不是错误,只是空字符串。
作为参考,现有的问题没有帮助:
当前文档中没有提供更多答案,也没有给出可行解决方案的具体示例。
好的,通过执行以下一项或两项操作即可解决问题(我不确定哪一项解决了问题):
添加了 SSH 密钥
url 中使用了项目 ID,而不是 NAMESPACE/PROJECTNAME。
然后在 URL 上使用 ?path=SUBDIRECTORY&ref_name=master (如所讨论的),它起作用了。
| 归档时间: |
|
| 查看次数: |
4355 次 |
| 最近记录: |