使用Jsoup永久检索状态为500的HttpStatusException

时间:2014-05-16 06:38:32

标签: java jsoup web-crawler

我想使用Jsoup访问位于网络服务器上的网站的某些数据。每次我尝试通过有效的URL连接时,我正在检索HttpStatusException并出现以下错误:

Exception in thread "main" org.jsoup.HttpStatusException: HTTP error fetching URL. Status=500, URL=http://sv.thisismydomain.de/path/xyz.jsp(我已更改网址)

这是我的尝试:

System.out.println(Jsoup.connect(urlBase + urlLoginForm).userAgent(userAgent).timeout(10000).get().html());

我确定这是正确的网址。如果我将它从StackTrace中复制到我的浏览器中,URL工作正常 - 所以这不是问题。

这是我正在使用的用户代理:

String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) " +
                   "Chrome/30.0.1599.101 Safari/537.36";

你有什么想法吗?这让我抓狂!

1 个答案:

答案 0 :(得分:2)

状态500是永久性错误。这意味着服务器遇到了一个意外的情况,导致它无法完成请求。除了在服务器中处理它之外,没有办法解决它。既然你说网址运作正常,那么我们可以重新检查一些可能性。这些可能不完全是505的原因。

1)当您说urlBase + urlLoginForm时,可能会错过\。假设您构建urlBase = http://sv.thisismydomain.de/pathurlLoginForm = xyz.jsp可能是http://sv.thisismydomain.de/pathxyz.jsp而不是http://sv.thisismydomain.de/path/xyz.jsp 如果urlLoginForm是参数列表,则应重新检查它的构造方式。 **理想情况下,这应该返回404,但由于域部分是正确的,因此可能会出现明显失败的情况。

2)您尝试访问的网站可能正在检查请求的来源。因此,在这种情况下,您可以依赖Jsoup的referrer方法。

Document doc = Jsoup.connect(urlBase + urlLoginForm).referrer(urlBase + urlLoginForm).userAgent(userAgent).timeout(10000).get();

**理想情况下,这应该返回Forbidden 403错误或拒绝访问。

3)确保支持get方法。尝试使用帖子。这应该返回一个方法303,但以防万一..;)

4)网址没有显示任何问题。由于它位于代理后面,您可以在调用jsoup.connect()之前尝试设置代理属性。但这又应该导致超时而不是505.

System.setProperty("http.proxyHost", "<your host ip>");
System.setProperty("http.proxyPort", "<proxy port>");

很抱歉提供与505无关的所有建议。由于我无权访问您的网址,因此我建议您这样做。 :)