我通过邮递员向 https URL 发出请求,我得到 400 响应和数据,没有任何认证配置。当我使用 RestTemplate 发出相同的请求时,我得到 404 not found with the same url。邮递员身体:
{
"Request": {
"usernamenull": "",
"passwordnull": ""
},
"username": "iceicebaby",
"password": "12345"
}
和Java代码:
HttpHeaders headers= new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Authorization","Basic ***");
headers.add("Accept", "*/*");
RequestBodyModel request = new RequestBodyModel();
request.setRequest(new UserRequest("",""));
request.setUsername(userName);
request.setPassword(password);
HttpEntity<RequestBodyModel> requestEntity = new HttpEntity<>(request,headers);
String response = restTemplate.postForObject(url,requestEntity,String.class);
任何帮助表示赞赏,谢谢。
编辑:我将代码更改为:
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST,requestEntity,String.class);
我收到 302 重定向错误(位置:相同的 url,服务器:'ACB'),而邮递员工作完美。
postman 和restTemplate 之间的区别在于它们处理重定向的方式。
邮差会自动重定向您的请求。正如您在此屏幕截图中看到的,我认为您邮递员的自动重定向选项也将打开。
但是,restTemplate 不会自动重定向您的请求。
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
.
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setRedirectStrategy(new LaxRedirectStrategy()) // Enables automatic redirect handling for all HTTP methods
.build();
HttpComponentsClientHttpRequestFactory requestFactory =
new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
if (responseEntity.getStatusCode() == HttpStatus.FOUND) { // 302 redirect
String redirectUrl = responseEntity.getHeaders().getLocation().toString();
// get the redirect Url from header
ResponseEntity<String> redirectedResponse = restTemplate.exchange(redirectUrl, HttpMethod.GET, new HttpEntity<>(headers), String.class);
}