有一些API可以通过它获取json,如果我在浏览器或邮递员中执行此url,则一切正常。如果我尝试通过restTeamplate获得它,那么我会得到各种各样的“爆竹”,尝试进行编码,但是什么都没发生(注释部分是我的尝试),有时还会出现其他爆竹,这是我的代码示例:
public String getInfo() {
RestTemplate restTemplate = new RestTemplate();
/*restTemplate.getMessageConverters()
.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));*/
/*try {
return new String(restTemplate.getForObject(API, String.class).getBytes(), "UTF-16");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}*/
//return restTemplate.getForEntity(API, String.class);
return restTemplate.getForObject(API, String.class);
}
如果您使用getForEntity方法,则邮递员或浏览器根本不会收到响应,我在邮递员中看到:在
中输入图像描述我怀疑我在请求中缺少一些标题。谁遇到过类似的问题,告诉我它是如何解决的,或者在哪里描述了类似的问题?
此api没有说明,但在浏览器中,此请求正常运行,尝试使用浏览器发送的标头
public ResponseEntity<String> getInfo() {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("Sec-Fetch-Mode", "cors");
httpHeaders.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 YaBrowser/19.9.3.314 Yowser/2.5 Safari/537.36");
httpHeaders.set("Access-Control-Allow-Origin", "*");
httpHeaders.set("Content-Type", "application/json; charset=utf-8");
HttpEntity<HttpHeaders> entity = new HttpEntity<>(httpHeaders);
return restTemplate.exchange(API, HttpMethod.GET, entity, String.class);
}
答案中也有这样的标题
[X节点:“ BKLA36-LA”,缓存控件:“ no-cache”,内容类型:“ application / json; charset = utf-8”,访问控件允许来源:“ * “,Access-Control-Allow-Methods:“ POST,GET,OPTIONS”,Access-Control-Allow-Header:“ Content-Type”,Connection:“ keep-alive”,Content-Encoding:“ gzip”,Content-长度:“ 146305”]
也许问题出在内容编码:“ gzip”