【发布时间】:2016-03-03 21:00:46
【问题描述】:
def http = new HTTPBuilder(url)
http.auth.basic username, password
def data = new URL(url)
def response = data.getText()
def relativePaths = new XmlParser().parseText(response)
relativePaths.each {page ->
def link = page.content.@href.first()
if(link.contains(".txt")){
println link
}
}
嗨,
当尝试运行它时,我得到一个 401。看起来像这里:
def response = data.getText()
它实际上不再经过身份验证(或根本没有)?在 Ruby 中,我会这样写:
(open(url, :http_basic_authentication => [username, password])
data = Nokogiri::XML(open(url, :http_basic_authentication => [username, password])))
在 Groovy 中会是什么样子?我使用httpbuilder 错了吗?提前非常感谢!
更新 1:
应用更改后:
def http = new HTTPBuilder(url)
http.auth.basic username, password
http.get(path: url, contentType: ContentType.TEXT) { resp, reader ->
def relativePaths = new XmlParser().parse(reader)
relativePaths.each { page ->
def link = page.content.@href.first()
if (link.contains(".txt")) {
println link
}
}
}
我得到一个 406:
响应码:406;找到处理程序:org.codehaus.groovy.runtime.MethodClosure@5be46f9d 捕获:groovyx.net.http.HttpResponseException:不可接受 groovyx.net.http.HttpResponseException: 不可接受
更新 2:
还是不行。我将 contentType 更改为 XML 并将路径更改为实际路径,但收到错误消息:
GET <URL>/<PATH>:(id:ContinuousIntegration_BuildTestDistribute)/artifacts/children/
Response code: 200; found handler: ArtifactDownloader$_run_closure1@5be46f9d
Parsing response as: application/xml
Could not find charset in response; using UTF-8
Parsed data to instance of: class groovy.util.slurpersupport.NodeChild
Caught: groovy.lang.MissingMethodException: No signature of method: groovy.util.XmlParser.parse() is applicable for argument types: (groovy.util.slurpersupport.NodeChild) values: []
Possible solutions: parse(java.io.File), parse(java.io.InputStream), parse(java.io.Reader), parse(java.lang.String), parse(org.xml.sax.InputSource), use([Ljava.lang.Object;)
groovy.lang.MissingMethodException: No signature of method: groovy.util.XmlParser.parse() is applicable for argument types: (groovy.util.slurpersupport.NodeChild) values: []
Possible solutions: parse(java.io.File), parse(java.io.InputStream), parse(java.io.Reader), parse(java.lang.String), parse(org.xml.sax.InputSource), use([Ljava.lang.Object;)
at ArtifactDownloader$_run_closure1.doCall(ArtifactDownloader.groovy:14)
at groovyx.net.http.HTTPBuilder$1.handleResponse(HTTPBuilder.java:503)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:218)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:160)
at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:515)
at groovyx.net.http.HTTPBuilder.get(HTTPBuilder.java:285)
at groovyx.net.http.HTTPBuilder$get.call(Unknown Source)
at ArtifactDownloader.run(ArtifactDownloader.groovy:12)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
只是为了比较,Ruby 脚本。也许httpbuilder 不是我想要的?我实际上只是想将其用于身份验证。
(open(url, :http_basic_authentication => [username, password])
data = Nokogiri::XML(open(url, :http_basic_authentication => [username, password])))
relativePaths = data.xpath("//content/@href")
relativePaths.each { |path|
if path.text.include? ".apk"
puts "<URL>:<PORT>"+path.text
end
}
【问题讨论】:
标签: authentication groovy httpbuilder