2

Groovy スクリプトと REST API を使用して成果物を検索しようとしています。

def query = ‘artifactory/api/search/artifact?name=at.mic.all.feature&repos=features-qa-test-snapshot’
def server = new RESTClient(‘http://mic-build2.mic.co.at:8081’)
server.parser.'application/vnd.org.jfrog.artifactory.search.ArtifactSearchResult+json' = server.parser.'application/json'
def resp = server.get(path: query)                       

これにより例外が発生します。

groovyx.net.http.HttpResponseException: Bad Request
    at groovyx.net.http.RESTClient.defaultFailureHandler(RESTClient.java:240)
    at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:508)
    at groovyx.net.http.RESTClient.get(RESTClient.java:118)
    at groovyx.net.http.RESTClient$get.call(Unknown Source)
    at Artifactory.getArtifacts(artifactory.groovy:157)
…

サーバーとクエリが正しいかどうかを確認するためだけに、url = サーバー + '/' + クエリ (= http://mic-build2.mic.co.at:8081/artifactory/api/search/artifact?name= at.mic.all.feature&repos=features-qa-test-snapshot ) をブラウザで実行すると、まさに私の検索結果を含むファイルが生成されます。

{"results":[{"uri":" http://mic-build2.mic.co.at:8081/artifactory/api/storage/features-qa-test-snapshot/at/mic/all/feature/ at.mic.all.feature/20130313002236/at.mic.all.feature-20130313002236-win32.win32.x86.zip "},…..}

したがって、サーバーとクエリは問題ないように見えますが、groovy スクリプトでは機能しません。

よろしくお願いします。フランク

4

2 に答える 2

4

アーティファクトの検索で同様の問題が発生しました(「Bad Request」または「Not found」の例外が発生しました)。問題の理由は、あなたのアプローチで作成された HTTP リクエストの形式が正しくないことです: アーティファクトリrequest.logで、リクエストが

/api/search/artifact?name=test

になる

/api/search/artifact%3Fname=test

これは明らかに間違った HTTP リクエストです。RESTClient のドキュメントを調査した結果、適切な解決策を見つけました。リクエスト全体を独自の文字列として連結するのではなく、提供された API を使用して HTTP リクエストを形成します。

def queryPath = '/api/search/artifact'
def server = new RESTClient('http://mic-build2.mic.co.at:8081')
server.parser.'application/vnd.org.jfrog.artifactory.search.ArtifactSearchResult+json' = server.parser.'application/json'
def resp = server.get(path: queryPath, query: [name: 'test', repos: 'your-repo'])

このようにして、適切なセパレーターを使用して HTTP リクエストを手動で形成する必要なく、任意のパラメーターをクエリにチェーンできます。これが役立つことを願っています

于 2013-08-21T14:32:16.407 に答える
4

URI パスは「/」で始まる必要があります。HTTP クライアントはそれを追加しません。

def query = ‘/artifactory/api/search/artifact?name=at.mic.all.feature&repos=features-qa-test-snapshot’

これはうまくいくはずです。

于 2013-04-10T09:18:26.620 に答える