首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring RestTemplate提供了与所有其他浏览器不同的响应,甚至是wget等

Spring RestTemplate提供了与所有其他浏览器不同的响应,甚至是wget等
EN

Stack Overflow用户
提问于 2017-09-29 06:00:45
回答 1查看 502关注 0票数 0

使用两个不同的web浏览器(带有cookies等...清除)和wget,我从google-news rss url https://news.google.com/news/rss/headlines/section/q/QUERY/My%20Search?ned=us&hl=en得到了正确的响应。

然而,我试图通过Spring的RestTemplate来假装wget通过

代码语言:javascript
复制
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完全相同的头(它确实可以工作)。

使用wget的httpbin.org输出

代码语言:javascript
复制
{
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "identity",
    "Connection": "close",
    "Host": "httpbin.org",
    "User-Agent": "Wget/1.19.1 (cygwin)"
  }
}

使用使用上述代码配置的RestTemplate的httpbin.org输出:

代码语言:javascript
复制
{
 "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "identity", 
    "Connection": "close", 
    "Host": "httpbin.org", 
    "User-Agent": "Wget/1.19.1 (cygwin)"
  }
}

完全相同的头,但结果完全不同。有人知道google使用tcp或http的哪些方面来审查他们对基于Spring的程序的输出吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-14 00:41:26

这个问题可能很久以前就已经解决了,没有人在这里给出任何答案。

我也遇到了同样的问题,结果是RestTemplate(String url, ...)应用编程接口的隐式编码。如果URL已编码,则将其作为URI RestTemplate(URI uri, ...)传递。否则,将其作为字符串传递。这解决了我的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46478939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档