Java での Basic 認証による認証
HTTP リクエストに Basic 認証を利用するcurl コマンドをエミュレートするには、HttpClient ライブラリを使用できます。ジャワでは。ただし、このライブラリの使用時にいくつかの問題が発生しました。
Commons HttpClient 3.0 を使用した最初の試行で、500 内部サーバー エラーが返されました。問題のコードは次のとおりです:
import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.PostMethod; ... // Set authentication credentials client.getState().setCredentials( new AuthScope("ipaddress", 443, "realm"), new UsernamePasswordCredentials("test1", "test1") ); ...
Commons HttpClient 4.0.1 を使用すると同じエラーが発生しました:
import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; ... // Set authentication credentials httpclient.getCredentialsProvider().setCredentials( new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), new UsernamePasswordCredentials("test1", "test1") ); ...
問題は認証の処理方法にあります。 HttpClient 4 を使用した基本認証の正しいアプローチは、リクエストを送信する前に「Authorization」ヘッダーを設定することです。
// Create a Base64 encoded string for the credentials String encoding = Base64.getEncoder().encodeToString((user + ":" + pwd).getBytes()); // Create the HTTP request with the correct header HttpPost httpPost = new HttpPost("http://host:port/test/login"); httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding); // Execute the request and handle the response accordingly HttpResponse response = httpClient.execute(httpPost);
この方法に従うことで、Java の HttpClient ライブラリを使用して基本認証を正常に実装できます。
以上がJava で HttpClient を使用した基本認証を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。