使用两个不同的网络浏览器(清除了 cookie 等)和 wget,我从 google-news rss url 得到了正确的响应https://news.google.com/news/rss/headlines/section/q/QUERY/My%20Search?ned=us&hl=en
。
但是,我尝试通过 Spring 的 RestTemplate 假装是 wget
HttpHeaders headers = new HttpHeaders();
headers.set("Accept", "*/*");
headers.set("Accept-encoding", "identity");
headers.set("User-Agent","Wget/1.19.1 (cygwin)");
ResponseEntity<String> responseEntity = restTemplate.exchange("https://news.google.com/news/rss/headlines/section/q/QUERY/My%20Search?ned=us&hl=en",
HttpMethod.GET, new HttpEntity<String>(null, headers), String.class
);
System.out.println(responseEntity.getBody);
从语法的角度来看,结果是正确的,除了没有项目,即没有新闻文章。
我用 进行了测试http://httpbin.org/headers
,所以我知道我正在发送与 wget 完全相同的标头(确实有效)。
httpbin.org 使用 wget 输出
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "identity",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "Wget/1.19.1 (cygwin)"
}
}
使用上述代码配置的 RestTemplate 的 httpbin.org 输出:
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "identity",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "Wget/1.19.1 (cygwin)"
}
}
完全相同的标题但完全不同的结果。任何人都知道 tcp 或 http google 的哪些方面用于审查他们对基于 Spring 的程序的输出?