Я пытаюсь выполнить запрос запроса REST API, используя org.apache.http.client.HttpClient в версии 4.3.6, но получая ошибку 401. Я использую обычную проверку подлинностиОшибка базовой авторизации HttpClient
Вот мой пример кода
BasicCredentialsProvider credprov = new BasicCredentialsProvider();
credprov.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(API_USERNAME, API_PASSWORD));
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultCredentialsProvider(credprov);
HttpClient client = builder.build();
HttpGet httpget = new HttpGet(API_TEST_URI);
HttpResponse response = httpClient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Response content length: " + entity.getContentLength());
}
if (entity != null) {
entity.consumeContent();
}
httpClient.getConnectionManager().shutdown();
Это возвращает 401, даже если все данные верны. Я отлаживал код HttpClient и обнаружил, что исходный ответ возвращает 401, а заголовок WWW-Authenticate просто устанавливается как «Basic» ни с чем другим. Затем это заканчивается исключением MalformedChallengeException. Исключение «Аутентификация является пустым».
Я попытался изменил код немного, чтобы непосредственно установить заголовок на переменную HttpGet с базовой аутентификации
httpget.addHeader("Authorization", "Basic " + Base64Encoder.encode ("username:password"));
и это работало (с указанием, что данные аутентификации являются правильными.
Может кто-нибудь найдет какие-либо проблемы с этим подходом и почему он не работает?
вы посмотрите на этот ответ: http://stackoverflow.com/questions/3283234/http-basic-authentication-in-java-using -httpclient? – Tom
да, и именно поэтому я посмотрел на добавление заголовка напрямую. но единственный бит, от которого он связан, указывает, что эта проверка подлинности может не работать для облачных сервисов – user3206236