GitLabサーバーにGETリクエストをスクリプトしてファイルを取得するためにGroovyを使用しようとしています。 API URI形式は次のとおりです。GETリクエストのURIで '/'をエスケープするにはどうすればよいですか?
https://githost/api/v4/projects/<namespace>%2F<repo>/files/<path>?ref=<branch>
名前空間とリポジトリの間にエンコードされた '/'があることに注意してください。最後の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。私は名前空間とリポジトリの間に%2FをエンコードしないようにURIを作成しようとする試みを複数試みましたが、何もできません。 '%'を再エンコードするか、それをリテラル「/」にデコードします。
「/」をエンコードしたままにする方法でURIを設定するには、Groovy + http-builder-ngを使用してこれを行うにはどうすればよいですか?私は検索しましたが、うまくいかない例は見つかりませんでした。
ありがとうございます!
'$ {apiNamespace}/$ {apiRepoName}'として使用できますか?私はエンコードされた値の代わりに '/'を使うことを意味しますか? – Rao
パス "/ api/v4/projects/REPO_ID/repository/files/..."では、REPO_IDは名前空間とリポジトリ名の組み合わせで、スラッシュで区切られています。しかし、スラッシュはパス区切りとして解釈されないようにエンコードされなければなりません。 残念ながら、それは直接使用することはできません。それ以外の場合は、別々のパス要素であり、APIはそれを認識しません。 –
これは、プロジェクトが 'URI'オブジェクトを構築/使用する際の問題です。回避策がないようです - 私はバグ修正に取り組んでいます。 – cjstehno