JSoup.connect在获取内容时会抛出403错误,而apache.httpclient可以成功获取内容。

19
我正在尝试解析任何给定页面的HTML转储。我使用了HTML解析器,也尝试了JSoup来进行解析。

我发现了JSoup中有用的函数,但是在调用Document doc = Jsoup.connect(url).get();时,我遇到了403错误。

我尝试使用HTTPClient获取HTML转储,并且对于相同的URL,这种方法是成功的。

为什么JSoup在相同的URL上会给出403错误,而从常见的HTTP客户端获取内容呢?我做错了什么吗?请给些建议。


1
请分享您连接的链接。 - vacuum
3
请查看链接 https://dev59.com/IWs05IYBdhLWcg3wAdST ,这里有类似问题的报告。 - Akash Yadav
我会尝试使用tcpdump或类似工具来查看HTTP客户端发送的数据与JSoup发送的数据之间的差异。 - Rostislav Matl
@AkashYadav 谢谢!用户代理的问题很有道理,而且解决了! - instanceOfObject
@instanceOfObject 你应该将你的可行解决方案发布为一个答案。 - Angelo Fuchs
1个回答

47

以下是可行的解决方案(感谢Angelo Neuschitzer提醒将其作为解决方案):

Document doc = Jsoup.connect(url).userAgent("Mozilla").get();
Elements links = doc.getElementsByTag(HTML.Tag.CITE.toString);
for (Element link : links) {
            String linkText = link.text();
            System.out.println(linkText);
}

所以,userAgent 就行了 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接