我通过Jsoup(最新版本1.10.2)面向服务器从页面中提取一些数据。 此服务器向匿名用户开放,但它使用重定向链为每个用户授予会话ID。
这是我通过浏览器得到的序列:
出乎意料的是,Jsoup的重定向链失败了。看看第2步的差异:
在步骤2中,服务器响应中的重定向位置以" /"开头。不是" http://",所以在第3步它连接到错误的主机。
为什么在第2步,根据请求属于浏览器或JSoup,我在服务器响应中得到了不同的位置?
我将JSoup请求设置为浏览器请求的相同标头:
Response response = Jsoup.connect(link)
.userAgent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
.header("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
.header("Accept-Encoding", "gzip, deflate, sdch")
.header("Accept-Language", "it,en-US;q=0.8,en;q=0.6")
.header("Upgrade-Insecure-Requests", "1")
.method(Method.GET)
.followRedirects(true).execute();
答案 0 :(得分:2)
Jsoup.Connect()中存在一个错误,指出如何处理重定向标头中的查询字符串。
现在已修复this commit。您可以构建HEAD来访问修复程序,它将在下一个版本(1.10.3)中提供。