Вот вызов 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 к вопросу. Конфиденциальные данные маскируются при необходимости




Выньте 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).
Вы включили перенаправления, поэтому я предполагаю, что URL-адрес в месте из заголовка возвращает 400.