Когда я пытаюсь подключиться к веб-серверу с помощью аутентификации DIGEST, соединение будет отклонено (401, Not Authenticated). Ответы я мог бы найти связанные с этой темой, где в основном устаревшей, поэтому я хотел бы начать дискуссию о решении этой проблемы с текущей версией:Apache HttpClient DigestAuth - 401, неавторизованный. Но учетные данные в порядке
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4.1</version>
</dependency>
Следующий код позволяет задать учетные данные и подключиться к моему целевому остальному мусора с использованием Apache HttpClient. The credentials I am using are correct
, так что должно быть что-то не так с моей конфигурацией учетных данных или тем, как я использую HTTPClient.
HttpGet getArticles = new HttpGet("http://myurl.xx/api/");
Registry<AuthSchemeProvider> authSchemeRegistry =
RegistryBuilder.<AuthSchemeProvider>create().register(AuthSchemes.DIGEST,new DigestSchemeFactory()).build();
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(
new AuthScope("http://myurl.xx/api/",80),
new UsernamePasswordCredentials(username,pw));
CloseableHttpClient client = HttpClients.custom()
.setDefaultAuthSchemeRegistry(authSchemeRegistry)
.setDefaultCredentialsProvider(credentialsProvider).build();
try {
CloseableHttpResponse response = client.execute(getArticles);
logger.info(String.valueOf(response.getStatusLine().getStatusCode()));
} catch (IOException e) {
logger.error(e.getMessage(),e);
}finally {
try {
client.close();
} catch (IOException e) {
logger.error(e.getMessage(),e);
}
}
Это вернет
HTTP/1.1 401 Unauthorized
Я не эксперт с дайджестом Идентом, но я знаю, что вы должны соединить два раза, потому что сервера будут посылать вам некоторые данные авторизации в первую очередь. Но я считаю, что, когда я регистрирую DIGEST как AuthentificationScheme, это должно обрабатываться автоматически?
Когда я проверяю клиента client.authSchemeRegistry говорит:
{[email protected]}
Так он успешно зарегистрирован.
Вы верны. Объем не был правильным. Я изменил его, и теперь я получаю OK 200. Спасибо :). – Goot
Это также работает, если я устанавливаю прокси для этой цели? – heaphach