1

私はApache HttpAsyncClientをテストしています。特に、認証が必要な非同期 HTTP POST リクエストを作成したいと考えています。この例を参考にしています。これまでのところ、アプリケーションの種類と本文を設定する方法はわかりましたが、資格情報を設定する方法がわかりません。

認証資格情報を追加しようとしています

    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 の認証データを設定する方法を説明する例は見つかりませんでした。誰でも私を助けることができますか?

4

1 に答える 1

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 構成ではなく、不正な (空の) 認証チャレンジを送信することによって発生する可能性があることにも注意してください。要求にユーザー資格情報を提供しても、必ずしも問題が解決するとは限りません。

于 2013-09-12T09:15:21.773 に答える