ApacheHttpClient-ユーザー認証

HttpClientを使用すると、ユーザー名とパスワードが必要なWebサイトに接続できます。この章では、ユーザー名とパスワードを要求するサイトに対してクライアント要求を実行する方法について説明します。

ステップ1-CredentialsProviderオブジェクトを作成する

ザ・ CredentialsProviderインターフェイスは、ユーザーのログイン資格情報を保持するためのコレクションを維持します。オブジェクトをインスタンス化することで作成できますBasicCredentialsProvider クラス、このインターフェイスのデフォルトの実装。

CredentialsProvider credentialsPovider = new BasicCredentialsProvider();

ステップ2-資格情報を設定する

を使用して、必要な資格情報をCredentialsProviderオブジェクトに設定できます。 setCredentials() 方法。

このメソッドは、以下に示すように2つのオブジェクトを受け入れます-

  • AuthScope object −ホスト名、ポート番号、認証スキーム名などの詳細を指定する認証スコープ。

  • Credentials object −資格情報(ユーザー名、パスワード)を指定します。

を使用して資格情報を設定します setCredentials() 以下に示すように、ホストとプロキシの両方のメソッド-

credsProvider.setCredentials(new AuthScope("example.com", 80), 
   new UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000), 
   new UsernamePasswordCredentials("abc", "passwd"));

ステップ3-HttpClientBuilderオブジェクトを作成する

作成する HttpClientBuilder を使用して custom() の方法 HttpClients クラス。

//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();

ステップ4-credentialsPoviderを設定します

上記で作成したcredentialsPoviderオブジェクトは、を使用してHttpClientBuilderに設定できます。 setDefaultCredentialsProvider() 方法。

前の手順で作成したCredentialProviderオブジェクトをクライアントビルダーに渡して、 CredentialsProvider object() 以下に示す方法。

clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);

ステップ5-CloseableHttpClientを構築する

ビルド CloseableHttpClient を使用するオブジェクト build() の方法 HttpClientBuilder クラス。

CloseableHttpClient httpclient = clientbuilder.build()

ステップ6-HttpGetオブジェクトを作成して実行します

HttpGetクラスをインスタンス化して、HttpRequestオブジェクトを作成します。を使用してこのリクエストを実行しますexecute() 方法。

//Creating a HttpGet object
HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/ ");

//Executing the Get request
HttpResponse httpresponse = httpclient.execute(httpget);

以下は、ユーザー認証を必要とするターゲットサイトに対するHTTPリクエストの実行を示すサンプルプログラムです。

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;

public class UserAuthenticationExample {
   
   public static void main(String args[]) throws Exception{
      
      //Create an object of credentialsProvider
      CredentialsProvider credentialsPovider = new BasicCredentialsProvider();

      //Set the credentials
      AuthScope scope = new AuthScope("https://www.tutorialspoint.com/questions/", 80);
      
      Credentials credentials = new UsernamePasswordCredentials("USERNAME", "PASSWORD");
      credentialsPovider.setCredentials(scope,credentials);

      //Creating the HttpClientBuilder
      HttpClientBuilder clientbuilder = HttpClients.custom();

      //Setting the credentials
      clientbuilder = clientbuilder.setDefaultCredentialsProvider(credentialsPovider);

      //Building the CloseableHttpClient object
      CloseableHttpClient httpclient = clientbuilder.build();

      //Creating a HttpGet object
      HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/questions/index.php");

      //Printing the method used
      System.out.println(httpget.getMethod()); 

      //Executing the Get request
      HttpResponse httpresponse = httpclient.execute(httpget);

      //Printing the status line
      System.out.println(httpresponse.getStatusLine());
      int statusCode = httpresponse.getStatusLine().getStatusCode();
      System.out.println(statusCode);

      Header[] headers= httpresponse.getAllHeaders();
      for (int i = 0; i<headers.length;i++) {
         System.out.println(headers[i].getName());
      }
   }
}

出力

上記のプログラムを実行すると、次の出力が生成されます。

GET
HTTP/1.1 200 OK
200