我想使用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";
你有什么想法吗?这让我抓狂!
答案 0 :(得分:2)
状态500是永久性错误。这意味着服务器遇到了一个意外的情况,导致它无法完成请求。除了在服务器中处理它之外,没有办法解决它。既然你说网址运作正常,那么我们可以重新检查一些可能性。这些可能不完全是505的原因。
1)当您说urlBase + urlLoginForm
时,可能会错过\
。假设您构建urlBase = http://sv.thisismydomain.de/path
和urlLoginForm = 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无关的所有建议。由于我无权访问您的网址,因此我建议您这样做。 :)