链接给出来自代码的无效响应代码,但给出来自浏览器的有效响应代码

时间:2019-01-08 13:43:23

标签: java http-response-codes external-links

我通过尝试点击链接并获取响应代码(在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

1 个答案:

答案 0 :(得分:1)

克服此问题的唯一方法是:

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

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