首页 > 解决方案 > 链接给出来自代码的无效响应代码,但来自浏览器的有效响应代码

问题描述

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

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

标签: javahttp-response-codesexternal-links

解决方案


克服这一点的唯一方法是:

我为你做了这个分析,结果发现这个网站需要一个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();
}

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


推荐阅读