代码之家  ›  专栏  ›  技术社区  ›  user2769795

Apache HttpAsyncClient

  •  1
  • user2769795  · 技术社区  · 12 年前

    我正在测试 Apache HttpAsyncClient ,特别是我想在需要身份验证的地方发出异步HTTPPOST请求。我使用 this example 作为参考。到目前为止,我已经了解了如何设置应用程序类型和主体,但无法了解如何设置凭据。

    我尝试使用添加身份验证凭据

        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设置身份验证数据。有人能帮我吗?

    1 回复  |  直到 12 年前
        1
  •  0
  •   ok2c    12 年前

    如果您希望默认情况下由所有请求共享,则可以在客户端级别设置凭据提供程序

        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配置引起的。为请求提供用户凭据可能不一定能解决这个问题。