【问题标题】:Permanently retrieving a HttpStatusException with status 500 using Jsoup使用 Jsoup 永久检索状态为 500 的 HttpStatusException
【发布时间】:2014-05-16 06:38:32
【问题描述】:

我想使用 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());

我确定这是正确的 URL。如果我将它从 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";

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

【问题讨论】:

  • urlBase + urlLoginForm,urlBase和urlLoginForm的值是多少??
  • String urlBase = "ht tp:/ /sv.thisismydomain.de/path/" String urlLoginForm = "xyz.jsp"; //(添加空格,因为编辑器将该值识别为超链接)

标签: java jsoup web-crawler


【解决方案1】:

状态 500 是永久性错误。这意味着服务器遇到了阻止它完成请求的意外情况。除了在服务器中处理它之外,没有其他办法。既然您说 url 运行良好,那么我们可以重新检查某些可能性。这些可能不完全是 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,但由于域部分是正确的,因此它可能会显式失败并返回 505。

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

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

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

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

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

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

很抱歉提供所有这些与 505 无关的建议。由于我无法访问您的 URL,因此这是我能建议的最佳选择。 :)

【讨论】:

  • 网址正确。我已将它从 StackTrace 复制到浏览器地址栏中 - 效果很好。感谢您的建议,但它也不起作用。我也尝试过 post() 方法 - 仍然得到同样的异常。也许很高兴知道我要访问的页面是一个 HTML 框架。
  • iframe 应该不是问题。只需检查该 url 的 html 的语法。基本上,您要么在 body 标签内有一个
  • 它是框架集中的框架。我使用了框架的正确 URL。我在没有设置用户代理的情况下尝试了连接,但它也不起作用。很抱歉,我无法共享 URL,因为该网站位于内部服务器上。但这里有一个改变字母的模式:sv-ms-03a.ab.abcd.de/AbcDefghi/abcd/abc.jsp
  • 网址没问题。由于它是内部的,您可能有权访问服务器吗?检查哪些情况返回 505 或服务器日志等。或者尝试通过 java.net.URL 打开该连接。 jsoup 可能正在使用它,但仍然尝试简单。或者在此之前尝试使用代理设置。已更新答案。
  • 感谢您的建议,但我已经尝试过使用代理设置,它们看起来很好,因为我能够连接到网络上的所有其他站点。不幸的是,我无权访问该服务器(它不是最小的公司,我只是一名程序员 - 不是管理员)。这是一个错误 500 而不是 505,但我认为这并没有更好。感谢您迄今为止提出的所有这些建议!
猜你喜欢
  • 2018-11-14
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
相关资源
最近更新 更多