我通过尝试点击链接并获取响应代码(在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
答案 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();
}
(或实际浏览器使用的任何其他值)