6

基本認証が必要なサイトに接続するアプリケーションがあります。サイトは実行時に提供され、コンパイル時にはわかりません。HttpClient 4.2、基本認証、およびAuthScope

私はHttpClient 4.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); 
+0

client.getCredentialsProvider()。 setCredentials( 新しいAuthScope(proxyHost、proxyPort)、 新しいUsernamePasswordCredentials(proxyUser、proxyPassword)); これは正しい方法です – MayurB

答えて

8

AuthScope.ANYはあなたが後にしているものです:、少なくともバージョン4.2.3(私はバージョン3.xの後に推測)から

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); 
+1

ありがとうございますKieran。私はクライアント上に 'getState'メソッドを持っていませんが、私たちはちょうど異なるバージョンを使っていると思います。あなたが提案したように 'AuthScope.ANY'を試してみました。うまくいきました - ありがとう。他にもう1つの質問がありますか? 'setAuthenticationPreemptive(true)'は必須/推奨ですか? – user265330

+1

このコメントを見るにはしばらく時間がかかりました。 'setAuthenticationPreemptive(true)'は、クレデンシャルなしで最初に試行されたリクエストを要求せずに401を取得し、一度チャレンジした後にクレンドカードを送信することを意味します。 – Kieran

+2

このメソッドはHttpClient4.1では使用できません – MayurB

2

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/auth/AuthScope.html

はこれを試してみてください受け入れられた回答はもう有効ではありません。代わりに、ような何か:AuthScope.ANYため

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をこのパラメータの使用はを中止することになるのHttpClientの将来のバージョンで氏は述べていますので、ご自身の責任でそれを使用します。より良いオプションは、AuthScopeで定義されたコンストラクタの1つを使用することです。リクエストが先制作成する方法についての議論について

、以下を参照してください

Preemptive Basic authentication with Apache HttpClient 4