我通过尝试点击链接并获取响应代码(Java语言)来验证链接。但是我从代码中得到了无效的响应码(403或404),但是从浏览器中,当我检查网络活动时,我得到了200个状态码。下面是获取响应码的代码。我事先对urls做了基本的验证,比如让它变得小写,等等。
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发布于 2019-01-09 19:32:24
克服这个问题的唯一方法是:
我为你做了这个分析,结果发现这个网站需要一个类似于现有浏览器的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();
}(或实际浏览器使用的任何其他值)
https://stackoverflow.com/questions/54093147
复制相似问题