Groovy 我如何逃离'/';在获取请求的URI中?

Groovy 我如何逃离'/';在获取请求的URI中?,groovy,httpbuilder-ng,Groovy,Httpbuilder Ng,我正试图使用Groovy编写一个脚本,向我们的GitLab服务器发送GET请求,以检索文件。API URI格式为: https://githost/api/v4/projects/<namespace>%2F<repo>/files/<path>?ref=<branch> 但是,将%2F重新编码为%252F。我尝试了多种方法来创建URI,这样它就不会在名称空间和repo之间对%2F进行编码,但我无法获得任何工作。它要么对“%”重新编码,要么将其解

我正试图使用Groovy编写一个脚本,向我们的GitLab服务器发送GET请求,以检索文件。API URI格式为:

https://githost/api/v4/projects/<namespace>%2F<repo>/files/<path>?ref=<branch>
但是,将%2F重新编码为%252F。我尝试了多种方法来创建URI,这样它就不会在名称空间和repo之间对%2F进行编码,但我无法获得任何工作。它要么对“%”重新编码,要么将其解码为文本“/”

如何使用Groovy+http builder ng来设置URI,从而保留编码的“/”?我已经搜索过了,但找不到任何有效的例子

谢谢

可能的解决方法

Gitlab API允许您通过项目id或项目名称进行查询。首先查找项目id,然后查询项目

  • 首先查找项目id。看

    def projects=//GET/projects

    def project=projects.find{it['path_with_namespace']=='diaspora/diaspora client'}

  • 通过id获取项目,请参阅

    GET/projects/${project.id}


  • 从1.0.0版本开始,您可以使用URI中的编码字符处理请求。例如:

    def result = HttpBuilder.configure {
        request.raw = "http://localhost:8080/projects/myteam%2Fmyrepo/myfile.json"
    }.get()
    

    注意,示例中使用了
    raw
    而不是
    uri
    。使用这种方法需要您自己对Uri进行任何其他编码/解码。

    它是否可以用作
    ${apiNamespace}/${apiRepoName}
    ?我的意思是在路径“/api/v4/projects/REPO\u ID/repository/files/…”中使用
    /
    而不是编码值。REPO\u ID是名称空间和存储库名称的组合,用斜杠分隔。但是斜杠必须进行编码,这样它就不会被解释为路径分隔符。不幸的是,它不能直接使用。否则,它们是独立的路径元素,API无法识别。这是项目构建/使用
    URI
    对象的方式的问题。似乎没有任何解决方法-我正在进行一个bug修复。在即将发布的1.0.0版本中,这个问题将得到修复(请参阅)
    def result = HttpBuilder.configure {
        request.raw = "http://localhost:8080/projects/myteam%2Fmyrepo/myfile.json"
    }.get()