Java の HttpClient を使用した HTTP 基本認証
この記事では、Java の HttpClient ライブラリを使用して HTTP 基本認証を実行する方法について説明します。 。 HTTP 基本認証は、クライアントが資格情報 (ユーザー名とパスワード) を提供して保護されたリソースにアクセスできるようにする、シンプルで広く使用されている認証メカニズムです。
HttpClient 3.0
HttpClient 3.0 の使用中に 500 Internal Server Error が発生したとおっしゃいました。動作するはずのコードの修正バージョンを次に示します。
public static void main(String[] args) { // TODO Auto-generated method stub try { HttpClient client = new HttpClient(); client.getParams().setAuthenticationPreemptive(true); // Add this line client.getState().setCredentials( new AuthScope("ipaddress", 443, "realm"), new UsernamePasswordCredentials("test1", "test1") ); PostMethod post = new PostMethod( "http://address/test/login"); post.setDoAuthentication( true ); try { int status = client.executeMethod( post ); System.out.println(status + "\n" + post.getResponseBodyAsString()); } finally { // release any connection resources used by the method post.releaseConnection(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
HttpClient 4.0.1
HttpClient 4.0.1 の場合は、次のコードを試すことができます。
public static void main(String[] args) { // TODO Auto-generated method stub try { DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.getCredentialsProvider().setCredentials( new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), new UsernamePasswordCredentials("test1", "test1")); // Add this line httpclient.setPreemptiveAuth(true); HttpPost httppost = new HttpPost("http://host:post/test/login"); System.out.println("executing request " + httppost.getRequestLine()); HttpResponse response; response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); System.out.println("----------------------------------------"); System.out.println(response.getStatusLine()); if (entity != null) { System.out.println("Response content length: " + entity.getContentLength()); } if (entity != null) { entity.consumeContent(); } httpclient.getConnectionManager().shutdown(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
代替案解決策
引き続き問題が発生する場合は、Apache HttpComponents ライブラリを使用して別の解決策を試すことができます。以下に例を示します:
String encoding = Base64.getEncoder().encodeToString((user + ":" + pwd).getBytes()); HttpPost httpPost = new HttpPost("http://host:post/test/login"); httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding); System.out.println("executing request " + httpPost.getRequestLine()); HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity();
以上がJava で HttpClient を使用して HTTP 基本認証を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。