2013-09-11 3 views
1

Я тестирую Apache HttpAsyncClient, в частности, я хочу сделать асинхронный запрос HTTP POST, где требуется аутентификация. Я использую this example в качестве ссылки. До сих пор я узнал, как установить тип и тело приложения, но не могу узнать, как установить учетные данные.Apache HttpAsyncClient

Я пытаюсь добавить учетные данные аутентификации с

HttpAsyncClientBuilder create = HttpAsyncClientBuilder.create(); 
    create.setTargetAuthenticationStrategy(new TargetAuthenticationStrategy()); 
    BasicCredentialsProvider basicCredentialsProvider = new BasicCredentialsProvider(); 
    Credentials defaultcreds = new UsernamePasswordCredentials("user", "password"); 
    basicCredentialsProvider.setCredentials(new AuthScope("http://localhost", 7351), defaultcreds); 
    create.setDefaultCredentialsProvider(basicCredentialsProvider); 

    final CloseableHttpAsyncClient httpclient = create.build(); 
    httpclient.start(); 
    ... 

Но я всегда получаю

Sep 11, 2013 4:21:35 PM org.apache.http.impl.auth.HttpAuthenticator handleAuthChallenge 
    WARNING: Malformed challenge: Authentication challenge is empty 

я не нашел пример, который объясняет, как установить данные аутентификации для CloseableHttpAsyncClient. Кто-нибудь может мне помочь?

ответ

0

Вы можете установить поставщик учетных данных либо на уровне клиента, если вы хотите быть общими для всех запросов по умолчанию

CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); 
    CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom() 
      .setDefaultCredentialsProvider(credentialsProvider) 
      .build(); 
    httpclient.start(); 
    try { 
     HttpGet request = new HttpGet("http://www.apache.org/"); 
     Future<HttpResponse> future = httpclient.execute(request, null); 
     HttpResponse response = future.get(); 
     System.out.println("Response: " + response.getStatusLine()); 
     System.out.println("Shutting down"); 
    } finally { 
     httpclient.close(); 
    } 
    System.out.println("Done"); 

или установить его на уровне запроса, если вы хотите, чтобы применить к конкретный запрос только

CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); 
    CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault(); 
    httpclient.start(); 
    try { 
     HttpGet request = new HttpGet("http://www.apache.org/"); 
     HttpClientContext context = HttpClientContext.create(); 
     context.setCredentialsProvider(credentialsProvider); 
     Future<HttpResponse> future = httpclient.execute(request, context, null); 
     HttpResponse response = future.get(); 
     System.out.println("Response: " + response.getStatusLine()); 
     System.out.println("Shutting down"); 
    } finally { 
     httpclient.close(); 
    } 
    System.out.println("Done"); 

Обратите внимание, что Malformed challenge: Authentication challenge is empty предупреждения, вероятно, вызвано сервер посылает искаженный (пустая) аутентификацию вызов, а не конфигурации HttpClient. Предоставление учетных данных пользователя для запроса может не обязательно решить проблему.

Смежные вопросы