2013-03-14 79 views
1

我試圖使用Groovy腳本和REST API搜索神器:Artifactory的通過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 = server +'/'+查詢(= 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腳本中不起作用。

在此先感謝您的幫助,親切的問候! Frank

回答

3

uri路徑應該以'/'開頭,HTTP客戶端不會爲你添加它。

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

這應該有效。

4

我有類似的問題搜索工件(它導致了更高的「錯誤請求」或「未找到」異常)。這個問題的原因是,你的方法創建HTTP請求的格式有誤:在artifactory的request.log我看到,請求

/api/search/artifact?name=test 

變成

/api/search/artifact%3Fname=test 

這顯然是不正確的HTTP請求。在調查了RESTClient documentation之後,我找到了正確的解決方案:使用提供的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請求。希望這會有所幫助

相關問題