Postman https 请求有效,但 rettemplate 无效

问题描述 投票:0回答:1

我使用邮递员向 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'),而邮递员工作完美。

spring spring-boot resttemplate
1个回答
0
投票

postman 和restTemplate 之间的区别在于它们处理重定向的方式。

邮差

邮差会自动重定向您的请求。正如您在此屏幕截图中看到的,我认为您邮递员的自动重定向选项也将打开。

休息模板

但是,restTemplate 不会自动重定向您的请求。

解决方案

1.配置restTemplate以遵循重定向

RestTemplate restTemplate = new RestTemplate();
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();

requestFactory.setOutputStreaming(false);
requestFactory.setBufferRequestBody(false);

requestFactory.setFollowRedirects(true);

restTemplate.setRequestFactory(requestFactory);

2.手动处理重定向

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.