我试图使用Groovy编写GET请求到我们的GitLab服务器来检索文件。 API URI格式为:
https://githost/api/v4/projects/<namespace>%2F<repo>/files/<path>?ref=<branch>
请注意,有一个编码的&#39; /&#39;在命名空间和repo之间。最终的URI需要如下所示才能正常工作:
https://githost/api/v4/projects/mynamespace%2Fmyrepo/files/myfile.json?ref=master
我有以下代码:
File f = HttpBuilder.configure {
request.uri.scheme = scheme
request.uri.host = host
request.uri.path = "/api/v4/projects/${apiNamespace}%2F${apiRepoName}/repository/files/${path}/myfile.json"
request.uri.query.put("ref", "master")
request.contentType = 'application/json'
request.accept = 'application/json'
request.headers['PRIVATE-TOKEN'] = apiToken
ignoreSslIssues execution
}.get {
Download.toFile(delegate as HttpConfig, new File("${dest}/myfile.json"))
}
然而,%2F被重新编码为%252F。我已经尝试了多种方法来尝试创建URI,这样它就不会在命名空间和repo之间编码%2F,但我无法正常工作。它要么重新编码&#39;%&#39;或将其解码为文字&#34; /&#34;。
如何使用Groovy + http-builder-ng来设置URI,以保留编码的&#34; /&#34;?我已经搜索过但无法找到任何有用的示例。
谢谢!
答案 0 :(得分:1)
从1.0.0版本开始,您可以处理URI中带有编码字符的请求。一个例子是:
def result = HttpBuilder.configure {
request.raw = "http://localhost:8080/projects/myteam%2Fmyrepo/myfile.json"
}.get()
注意,在示例中使用raw
而不是uri
。使用这种方法需要您自己对Uri进行任何其他编码/解码。
答案 1 :(得分:0)
可能的解决方法
Gitlab API允许您通过项目ID或项目名称进行查询。首先查找项目ID,然后查询项目。
首先查找项目ID。见https://docs.gitlab.com/ee/api/projects.html#list-all-projects
def projects = // GET / projects
def project = projects.find {it [&#39; path_with_namespace&#39;] ==&#39; diaspora / diaspora-client&#39; }
获取项目:id,请参阅https://docs.gitlab.com/ee/api/projects.html#get-single-project
GET / projects / $ {project.id}