Запрос GET с URL-адресом перенаправления не может получить 302 в JAVA, но Postman работает хорошо

Вот вызов API OKTA: GET {{OAuthProviderUrl}}/oauth2/v1/authorize?client_id = {{clientId}}&response_type=code&response_mode=query&scope = {{scopes}}&state = {{state}}&sessionToken = {{sessionToken }}&redirect_uri = {{redirectUri}}

Он может вернуть код: 302 с заголовком «местоположение» с помощью Postman, но... когда я пытался реализовать вызов в JAVA как:

RequestConfig config = RequestConfig.custom().setRedirectsEnabled(true).build();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(config).build();
String location = null;
HttpResponse response;
try {
response = httpClient.execute((new HttpGet(URL));
responseCode = response.getStatusLine().getStatusCode();
} catch (Exception e) {
e.printStackTrace();
}

Он всегда возвращает код: 400. Есть ли разница между почтальоном и JAVA? Спасибо.

Запросы GET не имеют разницы между почтальоном и реализацией Java.

Вы включили перенаправления, поэтому я предполагаю, что URL-адрес в месте из заголовка возвращает 400.

Rick 21.04.2023 13:49

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

John Williams 21.04.2023 15:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Выньте setRedirectsEnabled. Это заставит httpclient следовать перенаправлениям, а не передавать вам первый ответ. Страница, на которую осуществляется перенаправление, может возвращать код 400.

Мы можем получить больше ясности о причине проблемы, напечатав тело ответа:

String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
        System.out.println("Response body: " + responseBody);

Если это не исправит, то, вероятно, проблема с параметрами, отправляемыми из Java, что приводит к сбою аутентификации и вызову, возвращающему 400. Это в значительной степени определение 400 из учебника.

Правильный способ добавления параметров похож на это

URI uri = new URIBuilder(“https://provider.com/oauth2/v1/authorize”)
  .addParameter("client_id", "value1")
  .addParameter("response_type", "value2")
  // etc
  .build();

Я считаю очень полезным запускать вызовы httpclient на https://httpbin.org/get, а затем печатать тело ответа, как я предложил выше. httpbin.org повторяет то, что отправлено, позволяя сравнить его с почтальоном (если вы запускаете вызов, который, как вы знаете, работает с httpbin).

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

Похожие вопросы

Как я могу заставить пользовательский интерфейс Swagger запрашивать у меня заголовок авторизации вместо моей сущности пользователя?
Как заставить функцию CompletableFuture исключительно возвращать тип коллекции?
Запрос данных из хранилища данных AWS Amplify
Когда я использую Alert.Dialog, приложение вылетает
Запрос GraphQL с вводом ненулевого типа объекта возвращает внутреннюю ошибку, поскольку он превратился в нуль при проверке в коде
Ошибка java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory при попытке установить Oracle SOA Suite 12.2.1.4.0
Я новичок в Java-коде, сейчас я изучаю ООП и АТД. я успешно реализовал функцию addStudent, но deleteStudent не
Не удается подключиться к брокеру Kafka с помощью Spring Boot
Как проверить, существует ли текущий ключ моментального снимка в другом разделе той же базы данных
Обертка REST API в методы CRUD базы данных Spring, чтобы его можно было использовать в качестве @Repository