通过REST API进行Artifactory搜索会导致“错误请求”错误

时间:2013-03-14 10:06:52

标签: groovy artifactory httpbuilder

我正在尝试使用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 = server +'/'+ query(= http://mic-build2.mic.co.at:8081/artifactory/api/search/artifact?name=at.mic.all.feature&repos=features-qa-test-snapshot),这会产生一个包含我的搜索结果的文件: / p>

{ “结果”:[{ “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脚本中不起作用。

提前感谢您的帮助,亲切的问候! 弗兰克

2 个答案:

答案 0 :(得分: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请求。希望这会有所帮助

答案 1 :(得分:3)

uri路径应以'/'开头,HTTP客户端不会为您追加。

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

这应该有用。