6

基本認証が必要なサイトに接続するアプリケーションがあります。サイトは実行時に提供され、コンパイル時には不明です。

HttpClient4.2を使用しています。

以下のコードが基本認証を指定する方法であるかどうかはわかりませんが、ドキュメントにはそれが示されています。ただし、のコンストラクターで何を渡すかわかりませんAuthScope。nullパラメータは、提供された資格情報をすべてのURLに使用する必要があることを意味すると思っていましたが、がスローされるNullPointerExceptionため、明らかに間違っています。

m_client = new DefaultHttpClient();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(m_userName, m_password);
((DefaultHttpClient)m_client).getCredentialsProvider().setCredentials(new AuthScope((HttpHost)null), credentials);
4

2 に答える 2

7

AuthScope.ANYはあなたが求めているものです:http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/auth/AuthScope.html

これを試して:

    final HttpClient client = new HttpClient();
    client.getParams().setAuthenticationPreemptive(true);
    client.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(user.getUsername(), user.getPassword()));
    final GetMethod method = new GetMethod(uri);
    client.executeMethod(method);
于 2012-06-01T12:22:54.903 に答える
3

少なくともバージョン4.2.3(バージョン3.X以降だと思います)から、受け入れられた回答は無効になります。代わりに、次のようにします。

private HttpClient createClient() {
    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setContentCharset(params, "UTF-8");

    Credentials credentials = new UsernamePasswordCredentials("user", "password");
    DefaultHttpClient httpclient = new DefaultHttpClient(params);
    httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, credentials);

    return httpclient;
}

JavaDoc forにAuthScope.ANYよると、HttpClientの将来のバージョンでは、このパラメータの使用は中止されるため、自己責任で使用してください。より良いオプションは、で定義されたコンストラクターの1つを使用することAuthScopeです。

リクエストをプリエンプティブにする方法については、以下を参照してください。

ApacheHttpClient4を使用したプリエンプティブ基本認証

于 2015-02-19T07:34:14.043 に答える