链接从代码中提供无效的响应代码,但从浏览器提供有效的响应代码



我正在通过尝试点击链接并获取响应代码(在 Java 中)来验证链接。但是我从代码中得到无效的响应代码(403或404),但从浏览器,当我检查网络活动时,我得到200状态代码。这是我获取响应代码的代码。[我事先对网址进行了基本的验证,比如将其设置为小写等]

static int getResponseCode(String link) throws IOException {
    URL url = new URL(link);
    HttpURLConnection http = (HttpURLConnection) url.openConnection();
    return http.getResponseCode();
}

对于像 http://science.sciencemag.org/content/220/4599/868 这样的链接,当我运行此代码时,我得到了 403 状态。但是在浏览器(chrome)上,我得到了200状态。另外,如果我使用以下 curl 命令,我会得到 200 状态代码。

curl -Is http://science.sciencemag.org/content/220/4599/868

克服这个问题的唯一方法是:

  • 检查程序发送的 HTTP 标头是什么(例如,通过向 http://scooterlabs.com/echo 发送查询并检查响应)
  • 检查您的浏览器发送的HTTP标头是什么(例如,通过访问 https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending
  • 发现差异
  • 更改程序以发送与浏览器相同的标头(正常工作的标头)

我为您进行了此分析,事实证明,该网站需要一个类似于现有浏览器的 Accept 标头的Accept标头。默认情况下,Java发送一些有效的东西,但不类似于那个。

您只需要更改程序,如下所示:

static int getResponseCode(String link) throws IOException {
  URL url = new URL(link);
  HttpURLConnection http = (HttpURLConnection) url.openConnection();
  http.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
  return http.getResponseCode();
}

(或实际浏览器使用的任何其他值)

相关内容

  • 没有找到相关文章

最新更新