Spring 使用rest可以使用curl,但在使用RestTemplate时不起作用
我对Spring 使用rest可以使用curl,但在使用RestTemplate时不起作用,spring,rest,Spring,Rest,我对restemplate有问题,我想使用 当我使用Curl时,它会起作用: curl-i-H“Accept:application/json“-H”内容类型:application/json“-X GET 但是当我试图使用restemplate时,它不起作用 RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setAccept(
restemplate
有问题,我想使用
当我使用Curl时,它会起作用:
curl-i-H“Accept:application/json“-H”内容类型:application/json“-X GET
但是当我试图使用restemplate
时,它不起作用
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<?> entity = new HttpEntity<>(headers);
HttpEntity<String> response = restTemplate.exchange("http://swapi.co/api/", HttpMethod.GET, entity, String.class);
Root root = new Gson().fromJson(response.getBody(), Root.class);
System.out.println(root);
RestTemplate RestTemplate=new RestTemplate();
HttpHeaders=新的HttpHeaders();
setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity=新的HttpEntity(标题);
HttpEntity响应=restTemplate.exchange(“http://swapi.co/api/,HttpMethod.GET,entity,String.class);
Root=new Gson().fromJson(response.getBody(),Root.class);
System.out.println(根);
正如您所看到的,我在curl命令中设置了Accept和ContentType。我做错了什么,我一直在接受403禁止状态?
我正在使用带spring security的spring引导,但我禁用了csrf模式。只需使用
restTemplate.getForObject(“http://swapi.co/api/“,String.class)代码>(返回一个字符串)。
它更为直截了当和不言自明
您得到的403必须与标题相关,很可能是写着headers.setAccept(Collections.singletonList(MediaType.APPLICATION\u JSON))
只需使用restemplate.getForObject(“http://swapi.co/api/“,String.class)代码>(返回一个字符串)。
它更为直截了当和不言自明
您得到的403必须与您的头相关,很可能是写着headers.setAccept(Collections.singletonList(MediaType.APPLICATION\u JSON))
的行。检查响应表明请求通过Cloudflare,并且响应包含以下错误:
本网站的所有者(swapi.co)已根据您的浏览器签名(3a4c8846af5169b2-ua21)禁止您访问
因此,您可以作弊并添加接受的用户代理头。例如:
headers.add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0");
您应该联系swapi的所有者/维护者/开发人员,在文档中添加一个关于该限制的部分,因为它远不是显而易见的,应该明确记录下来。检查响应表明请求通过Cloudflare,并且响应包含以下错误:
本网站的所有者(swapi.co)已根据您的浏览器签名(3a4c8846af5169b2-ua21)禁止您访问
因此,您可以作弊并添加接受的用户代理头。例如:
headers.add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0");
您应该联系swapi的所有者/维护者/开发人员,在文档中添加一个关于该限制的部分,因为这远不是显而易见的,应该明确地记录下来。检查它所说的url,但上面的代码指向HTTP
HttpEntity<String> response = restTemplate.exchange("https://swapi.co/api/", HttpMethod.GET, entity, String.class);
HttpEntity response=restTemplate.exchange(“https://swapi.co/api/,HttpMethod.GET,entity,String.class);
检查上面显示的url,但上面的代码指向HTTP
HttpEntity<String> response = restTemplate.exchange("https://swapi.co/api/", HttpMethod.GET, entity, String.class);
HttpEntity response=restTemplate.exchange(“https://swapi.co/api/,HttpMethod.GET,entity,String.class);
我使用的是getForObject方法,但还是出现了相同的错误。这台电视机可能有什么问题。接受吗?它应该接受JSON。我使用的是getForObject方法,但仍然得到了相同的错误。这台电视机可能有什么问题。接受吗?它应该接受Jsons。您的url显示http,但您共享的是https??我有什么遗漏吗?你的url上写着http,但你共享的是https??我还缺什么吗?