Https-запрос Postman работает, но restTemplate нет

Я делаю запрос к URL-адресу https с помощью почтальона, получаю ответ 400 и данные без какой-либо конфигурации сертификации. Пока я делаю тот же запрос с помощью restTemplate, я получаю сообщение 404, не найденное с тем же 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»), в то время как почтальон работает отлично.

0
0
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Разница между почтальоном и restTemplate заключается в их способах обработки перенаправления.

Почтальон

Почтальон автоматически перенаправит ваш запрос. Как вы можете видеть на этом снимке экрана, я думаю, что опция автоматического перенаправления почтальона тоже будет включена.

отдыхШаблон

Но restTemplate не перенаправляет ваши запросы автоматически.

Решение

1. Настройте 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);

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);
}

спасибо, но метода setFollowRedirects нет. Можете ли вы предложить какой-либо другой метод вместо resttemplate, например, rest-клиента или любого другого клиента pache?

Aysu Vural 14.03.2024 13:00

Ты прав..! Поэтому я изменил первое решение. Надеюсь, это вам поможет :)

johyunkim 14.03.2024 15:38

Другие вопросы по теме