Apache-httpclient-quick-guide
Apache HttpClient-概要
ハイパーテキスト転送プロトコル(HTTP)は、分散型の協調型ハイパーメディア情報システム用のアプリケーションレベルのプロトコルです。 これは、1990年以降のWorld Wide Web(つまり、インターネット)のデータ通信の基盤です。 HTTPは、リクエストメソッド、エラーコード、およびヘッダーの拡張機能を使用するだけでなく、他の目的にも使用できる汎用のステートレスプロトコルです。
基本的に、HTTPはTCP/IPベースの通信プロトコルであり、World Wide Web上でデータ(HTMLファイル、画像ファイル、クエリ結果など)を配信するために使用されます。 デフォルトのポートはTCP 80ですが、他のポートも使用できます。 コンピューターが相互に通信するための標準化された方法を提供します。 HTTP仕様は、クライアントの要求データを構築してサーバーに送信する方法、およびサーバーがこれらの要求に応答する方法を定義します。
Httpクライアントとは
HTTPクライアントは転送ライブラリであり、クライアント側に常駐し、HTTPメッセージを送受信します。 最新のHTTP標準を満たす最新の機能豊富で効率的な実装を提供します。
これに加えて、クライアントライブラリを使用して、Webブラウザ、WebサービスクライアントなどのHTTPベースのアプリケーションを構築できます。
Httpクライアントの機能
以下は、HTTPクライアントの顕著な特徴です-
- HttpClientライブラリは、使用可能なすべてのHTTPメソッドを実装します。
- HttpClientライブラリは、Secure Socket Layerプロトコルを使用してリクエストを保護するAPIを提供します。
- HttpClientを使用すると、プロキシを使用して接続を確立できます。
- Basic、Digest、NTLMv1、NTLMv2、NTLM2 Sessionなどの認証スキームを使用して接続を認証できます。 HttpClientライブラリは、複数のスレッドを介した要求の送信をサポートしています。 ClientConnectionPoolManager *を使用して、さまざまなスレッドから確立された複数の接続を管理します。
- Apache HttpClientライブラリを使用して、接続タイムアウトを設定できます。
Apache HttpClient-環境のセットアップ
この章では、Eclipse IDEでHttpClientの環境を設定する方法について説明します。 インストールを続行する前に、システムにEclipseがインストールされていることを確認してください。 そうでない場合は、Eclipseをダウンロードしてインストールします。
Eclipseの詳細については、リンク:/eclipse/index [Eclipse Tutorial]を参照してください。
ステップ1-依存関係JARファイルをダウンロードする
HttpClient(コンポーネント)Webサイトの公式https://hc.apache.org/downloads.cgi[homepage]を開き、ダウンロードページに移動します。
次に、 _ HttpClient_ の最新の安定バージョンをダウンロードします。 ここでは、チュートリアル全体を通してバージョン4.5.6を使用しているため、 4.5.6.zip ファイルをダウンロードします。
ダウンロードしたフォルダー内に、 lib という名前のフォルダーがあります。これには、HttpClientで作業するためにプロジェクトのクラスパスに追加される必要なJarファイルが含まれています。
ステップ2-プロジェクトを作成し、ビルドパスを設定する
Eclipseを開き、サンプルプロジェクトを作成します。 プロジェクトを右クリックし、以下に示すように、 Build Path→Configure Build Path オプションを選択します。
そして、libフォルダー内のすべてのjarファイルを選択し、「適用して閉じる」をクリックします。
EclipseでHttpClientライブラリを使用するよう設定されています。
Apache HttpClient-Http Getリクエスト
GETメソッドは、特定のURIを使用して特定のサーバーから情報を取得するために使用されます。 GETを使用するリクエストは、データを取得するだけで、データに他の影響を与えません。
HttpClient APIは、getリクエストメソッドを表す HttpGet という名前のクラスを提供します。
以下の手順に従って、HttpClientライブラリを使用してgetリクエストを送信します
ステップ1-HttpClientオブジェクトを作成する
このメソッドを使用して、以下に示すようにHttpClientオブジェクトを作成します-
ステップ2-HttpGetオブジェクトを作成する
このクラスをインスタンス化して、HTTP GETリクエストを作成します。 このクラスのコンストラクターは、URIを表すString値を受け入れます。
ステップ3-Getリクエストを実行する
以下に示すように、このメソッドを使用してリクエストを実行します-
例
以下は、HttpClientライブラリを使用したHTTP GET要求の実行を示す例です。
出力
上記のプログラムは、次の出力を生成します-
Apache HttpClient-Http Postリクエスト
POST要求は、サーバーにデータを送信するために使用されます。たとえば、HTMLフォームを使用した顧客情報、ファイルのアップロードなど。
HttpClient APIは、POST要求を表す HttpPost という名前のクラスを提供します。
HttpClientライブラリを使用してHTTP POSTリクエストを送信するには、以下の手順に従います。
ステップ1-HttpClientオブジェクトを作成する
このメソッドを使用して、HttpClientオブジェクトを作成します。
ステップ2-HttpPostオブジェクトを作成する
ステップ3-Getリクエストを実行する
CloseableHttpClientオブジェクトの* execute()*メソッドは、HttpUriRequest(インターフェイス)オブジェクト(つまり、 HttpGet、HttpPost、HttpPut、HttpHeadなど)と応答オブジェクトを返します。
例
以下は、HttpClientライブラリを使用したHTTP POST要求の実行を示す例です。
出力
上記のプログラムは、次の出力を生成します。
Apache HttpClient-応答ハンドラー
応答ハンドラーを使用してHTTP応答を処理することをお勧めします。 この章では、応答ハンドラーの作成方法と、応答ハンドラーを使用して応答を処理する方法について説明します。
応答ハンドラーを使用すると、すべてのHTTP接続が自動的に解放されます。
応答ハンドラーを作成する
HttpClient APIは、パッケージ* org.apache.http.client。に *ResponseHandler と呼ばれるインターフェイスを提供します。応答ハンドラを作成するには、このインターフェイスを実装し、* handleResponse()*メソッドをオーバーライドします。
すべての応答にはステータスコードがあり、ステータスコードが200〜300の場合、アクションが正常に受信され、理解され、受け入れられたことを意味します。 したがって、この例では、このようなステータスコードを持つ応答のエンティティを処理します。
応答ハンドラーを使用して要求を実行する
以下の手順に従って、応答ハンドラーを使用して要求を実行します。
ステップ1-HttpClientオブジェクトを作成する
ステップ2-応答ハンドラーのインスタンス化
次のコード行を使用して、上記で作成した応答ハンドラーオブジェクトをインスタンス化します-
ステップ3-HttpGetオブジェクトを作成する
HttpGetクラスをインスタンス化し、URIを表す文字列をコンストラクターのパラメーターとして渡すことにより、HttpGet要求を作成します。
ステップ4-応答ハンドラーを使用してGetリクエストを実行する
例
次の例は、応答ハンドラーの使用方法を示しています。
出力
上記のプログラムは、次の出力を生成します-
Apache HttpClient-接続を閉じる
応答ハンドラーを使用する代わりにHTTP応答を手動で処理する場合は、すべてのhttp接続を自分で閉じる必要があります。 この章では、接続を手動で閉じる方法について説明します。
HTTP接続を手動で閉じる間、以下の手順に従います-
ステップ1-HttpClientオブジェクトを作成する
このメソッドを使用して、以下に示すように HttpClient オブジェクトを作成します-
ステップ2-try-finallyブロックを開始する
try-finallyブロックを開始し、tryブロックのプログラムに残りのコードを記述し、finallyブロックのCloseableHttpClientオブジェクトを閉じます。
ステップ3-HttpGetobjectを作成する
URIを表す文字列を渡してHttpGetクラスをインスタンス化することにより、HTTP GETリクエストを作成します。
ステップ4-Getリクエストを実行する
指定されたメソッドを使用してリクエストを実行します-
ステップ5-別の(ネストされた)try-finallyを開始する
別のtry-finallyブロック(前のtry-finally内にネスト)を開始し、このtryブロック内のプログラムに残りのコードを記述し、finallyブロック内のHttpResponseオブジェクトを閉じます。
例
要求、応答ストリームなどのオブジェクトを作成/取得するたびに、次の行でtry finallyブロックを開始し、try内に残りのコードを記述し、次のプログラムに示すようにfinallyブロックでそれぞれのオブジェクトを閉じます-
出力
上記のプログラムを実行すると、次の出力が生成されます-
Apache HttpClient-リクエストの中止
- abort()*メソッドを使用して現在のHTTPリクエストを中止できます。つまり、特定のリクエストでこのメソッドを呼び出した後、その実行は中止されます。
このメソッドが1回の実行後に呼び出された場合、その実行の応答は影響を受けず、後続の実行は中止されます。
例
次の例を見ると、HttpGetリクエストが作成され、* getMethod()*を使用してリクエスト形式が出力されています。
次に、同じリクエストで別の実行を実行しました。 もう一度1 ^ st ^実行を使用してステータス行を出力しました。 最後に、2回目の実行のステータス行を印刷しました。
説明したように、1 ^ st ^実行(アボートメソッド前の実行)の応答(アボートメソッドの後に書き込まれる2番目のステータス行を含む)が出力され、アボートメソッド後の現在のリクエストの後続の実行はすべて失敗します例外を呼び出します。
出力
実行すると、上記のプログラムは次の出力を生成します-
Apache HttpClient-インターセプター
インターセプターは、要求または応答を妨害または変更するのに役立つものです。 プロトコルインターセプターは一般に、特定のヘッダーまたは関連するヘッダーのグループに基づいて動作します。 HttpClientライブラリは、インターセプターのサポートを提供します。
リクエストインターセプター
クライアント側では、このメソッドはリクエストを検証/処理してからサーバーに送信し、サーバー側では、リクエストの本文を評価する前にこのメソッドを実行します。
リクエストインターセプターの作成
以下に示す手順に従って、要求インターセプターを作成できます。
- ステップ1-HttpRequestInterceptor *のオブジェクトを作成します
抽象メソッドプロセスを実装して、HttpRequestInterceptorインターフェイスのオブジェクトを作成します。
ステップ2-CloseableHttpClientオブジェクトのインスタンス化
以下に示すように、上記で作成したインターセプターを追加して、カスタム CloseableHttpClient オブジェクトを構築します-
このオブジェクトを使用して、通常どおりリクエストの実行を実行できます。
例
次の例は、リクエストインターセプターの使用方法を示しています。 この例では、HTTP GETリクエストオブジェクトを作成し、3つのヘッダーを追加しました:sample-header、demoheader、およびtest-header。
インターセプターの* processor()メソッドでは、送信されたリクエストのヘッダーを検証しています。それらのヘッダーのいずれかが *sample-header である場合、そのヘッダーを削除し、その特定のリクエストのヘッダーのリストを表示しようとしています。
出力
上記のプログラムを実行すると、次の出力が生成されます-
応答インターセプター
サーバー側では、このメソッドは応答を検証/処理してからクライアントに送信し、クライアント側ではこのメソッドを実行してから応答の本文を評価します。
応答インターセプターの作成
次の手順に従って、応答インターセプターを作成できます-
ステップ1-HttpResponseInterceptorのオブジェクトを作成します
抽象メソッド process を実装して、 HttpResponseInterceptor インターフェイスのオブジェクトを作成します。
ステップ2:CloseableHttpClientオブジェクトのインスタンス化
以下に示すように、上記で作成したインターセプターを追加して、カスタム CloseableHttpClient オブジェクトを構築します-
このオブジェクトを使用して、通常どおりリクエストの実行を実行できます。
例
次の例は、応答インターセプターの使用方法を示しています。 この例では、プロセッサの応答に3つのヘッダー、sample-header、demo-header、およびtest-headerを追加しました。
リクエストを実行してレスポンスを取得した後、* getAllHeaders()*メソッドを使用して、レスポンスのすべてのヘッダーの名前を出力しました。
また、出力では、リスト内の3つのヘッダーの名前を確認できます。
出力
実行すると、上記のプログラムは次の結果を生成します-
Apache HttpClient-ユーザー認証
HttpClientを使用すると、ユーザー名とパスワードが必要なWebサイトに接続できます。 この章では、ユーザー名とパスワードを要求するサイトに対してクライアント要求を実行する方法について説明します。
ステップ1-CredentialsProviderオブジェクトを作成する
ステップ2-資格情報の設定
- setCredentials()*メソッドを使用して、CredentialsProviderオブジェクトに必要な資格情報を設定できます。
このメソッドは、以下に示すように2つのオブジェクトを受け入れます-
- * AuthScopeオブジェクト*-ホスト名、ポート番号、認証スキーム名などの詳細を指定する認証スコープ。
- 資格情報オブジェクト-資格情報(ユーザー名、パスワード)を指定します。
以下に示すように、ホストとプロキシの両方に対して* setCredentials()*メソッドを使用して資格情報を設定します-
ステップ3-HttpClientBuilderオブジェクトを作成する
ステップ4-クレデンシャルを設定する
- setDefaultCredentialsProvider()*メソッドを使用して、上記で作成したcredentialsPoviderオブジェクトをHttpClientBuilderに設定できます。
前の手順で作成したCredentialProviderオブジェクトを、次に示すように* CredentialsProvider object()*メソッドに渡すことにより、クライアントビルダーに設定します。
ステップ5-CloseableHttpClientを構築する
ステップ6-HttpGetオブジェクトを作成して実行する
HttpGetクラスをインスタンス化して、HttpRequestオブジェクトを作成します。 * execute()*メソッドを使用してこのリクエストを実行します。
例
以下は、ユーザー認証を必要とするターゲットサイトに対するHTTP要求の実行を示すサンプルプログラムです。
出力
実行すると、上記のプログラムは次の出力を生成します。
Apache HttpClient-プロキシの使用
プロキシサーバーは、クライアントとインターネット間の仲介サーバーです。 プロキシサーバーは、次の基本的な機能を提供します-
- ファイアウォールおよびネットワークデータフィルタリング
- ネットワーク接続の共有
- データキャッシング
HttpClientライブラリを使用すると、プロキシを使用してHTTP要求を送信できます。 以下の手順に従ってください-
ステップ1-HttpHostオブジェクトを作成する
(リクエストを送信する必要がある)プロキシホストの名前を表す文字列パラメーターをコンストラクターに渡すことにより、 org.apache.http パッケージの HttpHost クラスをインスタンス化します。
同様に、リクエストを送信する必要のあるターゲットホストを表す別のHttpHostオブジェクトを作成します。
ステップ2-HttpRoutePlannerオブジェクトを作成する
ステップ3-ルートプランナーをクライアントビルダーに設定する
ステップ4-CloseableHttpClientオブジェクトを構築する
- build()メソッドを呼び出して、 *CloseableHttpClient オブジェクトをビルドします。
ステップ5-HttpGetobjectを作成する
ステップ6-リクエストを実行する
- execute()メソッドのバリアントの1つは、 *HttpHost および HttpRequest オブジェクトを受け入れ、要求を実行します。 このメソッドを使用してリクエストを実行します-
例
次の例は、プロキシを介してサーバーにHTTP要求を送信する方法を示しています。 この例では、localhost経由でgoogle.comにHTTP GETリクエストを送信しています。 応答のヘッダーと応答の本文を印刷しました。
出力
実行すると、上記のプログラムは次の出力を生成します-
Apache HttpClient-プロキシ認証
この章では、例を使用して、ユーザー名とパスワードを使用して認証されたHttpRequestを作成し、プロキシを介してターゲットホストにトンネルする方法を学習します。
ステップ1-CredentialsProviderオブジェクトを作成する
CredentialsProvider Interfaceは、ユーザーログイン資格情報を保持するコレクションを維持します。 このインターフェイスのデフォルト実装であるBasicCredentialsProviderクラスをインスタンス化することにより、そのオブジェクトを作成できます。
ステップ2-資格情報を設定する
- setCredentials()*メソッドを使用して、CredentialsProviderオブジェクトに必要な資格情報を設定できます。 このメソッドは、2つのオブジェクトを受け入れます-
- * AuthScopeオブジェクト*-ホスト名、ポート番号、認証スキーム名などの詳細を指定する認証スコープ。
- 資格情報オブジェクト-資格情報(ユーザー名、パスワード)を指定します。 以下に示すように、ホストとプロキシの両方に対して* setCredentials()*メソッドを使用して資格情報を設定します。
ステップ3-HttpClientBuilderオブジェクトを作成する
以下に示すように HttpClients クラスの* custom()メソッドを使用して *HttpClientBuilder を作成します-
ステップ4-CredentialsProviderの設定
- setDefaultCredentialsProvider()メソッドを使用して、CredentialsProviderオブジェクトをHttpClientBuilderオブジェクトに設定できます。 以前に作成した *CredentialsProvider オブジェクトをこのメソッドに渡します。
ステップ5-CloseableHttpClientを構築する
- build()メソッドを使用して *CloseableHttpClient オブジェクトをビルドします。
ステップ6-プロキシおよびターゲットホストを作成する
ステップ7-プロキシを設定し、RequestConfigオブジェクトを構築します
- custom()メソッドを使用して *RequestConfig.Builder オブジェクトを作成します。 * setProxy()メソッドを使用して、以前に作成したproxyHostオブジェクトを *RequestConfig.Builder に設定します。 最後に、* build()メソッドを使用して *RequestConfig オブジェクトをビルドします。
ステップ8-HttpGet要求オブジェクトを作成し、それに構成オブジェクトを設定します。
HttpGetクラスをインスタンス化して HttpGet オブジェクトを作成します。 * setConfig()*メソッドを使用して、前の手順で作成した構成オブジェクトをこのオブジェクトに設定します。
ステップ9-リクエストを実行する
HttpHostオブジェクト(ターゲット)とリクエスト(HttpGet)をパラメーターとして* execute()*メソッドに渡すことにより、リクエストを実行します。
例
次の例は、ユーザー名とパスワードを使用してプロキシ経由でHTTP要求を実行する方法を示しています。
出力
実行すると、上記のプログラムは次の出力を生成します-
Apache HttpClient-フォームベースのログイン
HttpClientライブラリを使用すると、リクエストを送信したり、パラメータを渡してフォームにログインしたりできます。
以下の手順に従って、フォームにログインします。
ステップ1-HttpClientオブジェクトを作成する
ステップ2-RequestBuilderオブジェクトを作成する
クラス RequestBuilder は、パラメーターを追加して要求を作成するために使用されます。 リクエストタイプがPUTまたはPOSTの場合、リクエストにパラメーターをURLエンコードエンティティとして追加します
post()メソッドを使用して、(POSTタイプの)RequestBuilderオブジェクトを作成します。
ステップ3-UriとパラメーターをRequestBuilderに設定します。
RequestBuilderクラスの* setUri()および addParameter()*メソッドを使用して、URIおよびパラメーターをRequestBuilderオブジェクトに設定します。
ステップ4-HttpUriRequestオブジェクトを構築する
必須パラメーターを設定したら、* build()メソッドを使用して *HttpUriRequest オブジェクトをビルドします。
ステップ5-リクエストを実行する
CloseableHttpClientオブジェクトのexecuteメソッドは、HttpUriRequest(インターフェイス)オブジェクト(つまり、 HttpGet、HttpPost、HttpPut、HttpHeadなど)と応答オブジェクトを返します。
前の手順で作成したHttpUriRequestを* execute()*メソッドに渡して実行します。
例
次の例は、ログイン資格情報を送信してフォームにログオンする方法を示しています。 ここでは、2つのパラメーター-*ユーザー名とパスワード*をフォームに送信し、メッセージエンティティとリクエストのステータスを出力しようとしました。
出力
実行すると、上記のプログラムは次の出力を生成します-
Cookieを使用したフォームログイン
フォームがデフォルトの CloseableHttpClient オブジェクトを作成する代わりに、Cookieを保存する場合。
- BasicCookieStoreクラスをインスタンス化して、CookieStoreオブジェクトを作成します。
- HttpClients クラスの* custom()*メソッドを使用してHttpClientBuilder *を作成します。
- setDefaultCookieStore()メソッドを使用して、Cookieストアをクライアントビルダーに設定します。
- build()メソッドを使用して *CloseableHttpClient オブジェクトをビルドします。
リクエストの実行を渡すことにより、上記で指定した HttpUriRequest オブジェクトを作成します。
ページにCookieが保存されている場合、渡したパラメーターはCookieストアに追加されます。
パラメータを見ることができる CookieStore オブジェクトの内容を印刷できます(以前のページとともに、ケースに保存されたページ)。
Cookieを印刷するには、* getCookies()メソッドを使用して *CookieStore オブジェクトからすべてのCookieを取得します。 このメソッドは List オブジェクトを返します。 イテレータを使用して、以下に示すようにリストオブジェクトの内容を印刷します-
Apache HttpClient-クッキー管理
Cookieは、クライアントコンピューターに保存されるテキストファイルであり、さまざまな情報追跡目的で保持されます。
HttpClientは、Cookieを作成および管理できるCookieのサポートを提供します。
クッキーを作成する
以下の手順に従って、HttpClientライブラリを使用してCookieを作成します。
ステップ1-Cookiestoreオブジェクトを作成する
ステップ2-ClientCookieオブジェクトを作成する
Cookieの機能に加えて、ClientCookieはサーバー内の元のCookieを取得できます。 BasicClientCookie クラスをインスタンス化することにより、クライアントCookieを作成できます。 このクラスのコンストラクターには、特定のCookieに保存するキーと値のペアを渡す必要があります。
ステップ3-Cookieに値を設定します
クライアントCookieに対して、それぞれの方法を使用して、パス、値、バージョン、有効期限、ドメイン、コメント、および属性を設定/削除できます。
手順4-CookieをCookieストアに追加する
必要なCookieを Cookiestore に追加します。
例
次の例は、Cookieを作成し、Cookieストアに追加する方法を示しています。 ここでは、ドメインとパスの値を設定してCookieストア、Cookieの束を作成し、Cookieストアに追加しました。
クッキーを取得する
以下に示すように、イテレータを使用してクッキーストアの内容を印刷できます-
例
次の例は、CookieストアからCookieを取得する方法を示しています。 ここでは、大量のCookieをCookieストアに追加し、それらを取得しています。
出力
実行すると、このプログラムは次の出力を生成します-
Apache HttpClient-複数のスレッド
マルチスレッドプログラムには、同時に実行できる2つ以上の部分が含まれており、各部分は同時に使用可能なリソースを最適に使用して異なるタスクを処理できます。
マルチスレッドHttpClientプログラムを記述することにより、複数のスレッドからリクエストを実行できます。
スレッドから複数のクライアントリクエストを連続して実行する場合は、 ClientConnectionPoolManager を作成する必要があります。 HttpClientConnections のプールを維持し、スレッドからの複数のリクエストを処理します。
接続マネージャーは、ルートに基づいて接続をプールします。 マネージャに特定のルートへの接続がある場合、マネージャは、新しい接続を作成する代わりに、プールから既存の接続をリースすることにより、それらのルートで新しいリクエストを処理します。
手順に従って、複数のスレッドからリクエストを実行します-
手順1-クライアント接続プールマネージャーの作成
ステップ2-接続の最大数を設定する
- setMaxTotal()*メソッドを使用して、プール内の接続の最大数を設定します。
ステップ3-ClientBuilderオブジェクトを作成する
以下に示すように、* setConnectionManager()メソッドを使用して接続マネージャーを設定することにより、 *ClientBuilder オブジェクトを作成します-
ステップ4-HttpGet要求オブジェクトを作成する
目的のURIをコンストラクターにパラメーターとして渡すことにより、HttpGetクラスをインスタンス化します。
ステップ5-runメソッドの実装
クラスを作成し、スレッド(スレッドクラスを拡張するか、Runnableインターフェイスを実装することで)にし、runメソッドを実装したことを確認してください。
ステップ6-スレッドオブジェクトの作成
上記で作成したThreadクラス(ClientMultiThreaded)をインスタンス化して、スレッドオブジェクトを作成します。
HttpClientオブジェクト、それぞれのHttpGetオブジェクト、およびIDを表す整数をこれらのスレッドに渡します。
ステップ7-スレッドを開始して参加する
- start()*メソッドを使用してすべてのスレッドを開始し、join * method()*を使用してそれらを結合します。
ステップ8-メソッド実装の実行
runメソッド内で、リクエストを実行し、レスポンスを取得して結果を出力します。
例
次の例は、複数のスレッドからのHTTP要求の同時実行を示しています。 この例では、さまざまなスレッドからさまざまな要求を実行し、各クライアントが読み取ったステータスとバイト数を出力しようとしています。
出力
実行すると、上記のプログラムは次の出力を生成します-
Apache HttpClient-カスタムSSLコンテキスト
Secure Socket Layerを使用すると、クライアントとサーバー間に安全な接続を確立できます。 クレジットカード番号、ユーザー名、パスワード、ピンなどの機密情報を保護するのに役立ちます。
以下に示す手順に従って、HttpClientライブラリを使用してSSLContextをカスタマイズします-
ステップ1-SSLContextBuilderオブジェクトを作成する
ステップ2-キーストアをロードする
パス Java_home_directory/jre/lib/security/ で、cacertsという名前のファイルを見つけることができます。 これをキーストアファイル(拡張子.jks)として保存します。 SSLContextBuilder クラスの* loadTrustMaterial()メソッドを使用して、キーストアファイルとそのパスワード(デフォルトでは *changeit )をロードします。
ステップ3-SSLContextオブジェクトを作成する
SSLContextオブジェクトは、セキュアソケットプロトコルの実装を表します。 * build()*メソッドを使用してSSLContextを構築します。
ステップ4-SSLConnectionSocketFactoryオブジェクトの作成
これはさまざまな方法で作成できます。 SSLConnectionSocketFactory オブジェクトの作成方法に応じて、すべてのホストを許可したり、自己署名証明書のみを許可したり、特定のプロトコルのみを許可したりできます。
特定のプロトコルのみを許可するには、SSLContextオブジェクトを渡すことで *SSLConnectionSocketFactory オブジェクトを作成します。プロトコルを表す文字列配列をサポートする必要があり、暗号スーツを表す文字列配列をサポートする必要があり、HostnameVerifierオブジェクトをコンストラクタに渡します。
すべてのホストを許可するには、 SSLContextオブジェクトと NoopHostnameVerifier オブジェクトを渡すことで SSLConnectionSocketFactory オブジェクトを作成します。
ステップ5-HttpClientBuilderオブジェクトを作成する
ステップ6-SSLConnectionSocketFactoryオブジェクトを設定する
- setSSLSocketFactory()メソッドを使用して、SSLConnectionSocketFactoryオブジェクトを *HttpClientBuilder に設定します。
ステップ7-CloseableHttpClientオブジェクトを構築する
- build()メソッドを呼び出して、 *CloseableHttpClient オブジェクトをビルドします。
ステップ8-HttpGetオブジェクトを作成する
URIを表す文字列を渡してHttpGetクラスをインスタンス化することにより、HTTP GETリクエストを作成します。
ステップ9-リクエストを実行する
- execute()*メソッドを使用してリクエストを実行します。
例
次の例は、SSLContrextのカスタマイズを示しています-
出力
実行すると、上記のプログラムは次の出力を生成します。
Apache HttpClient-マルチパートアップロード
HttpClientを使用して、マルチパートアップロードを実行できます。つまり、大きなオブジェクトを小さなパーツにアップロードできます。 この章では、単純なテキストファイルをアップロードすることにより、HTTPクライアントでのマルチパートアップロードを示します。
一般に、マルチパートアップロードには3つのパートが含まれます。
- アップロードの開始
- オブジェクトパーツのアップロード
- マルチパートアップロードの完了
HttpClientを使用したマルチパートアップロードの場合、以下の手順に従う必要があります-
- マルチパートビルダーを作成します。
- 必要なパーツを追加します。
- ビルドを完了し、マルチパートHttpEntityを取得します。
- 上記のマルチパートエンティティを設定して、リクエストをビルドします。
- リクエストを実行します。
HttpClientライブラリを使用してマルチパートエンティティをアップロードする手順は次のとおりです。
ステップ1-HttpClientオブジェクトを作成する
ステップ2-FileBodyオブジェクトを作成する
ステップ3-MultipartEntityBuilderを作成する
ステップ4-モードを設定する
手順5-必要なさまざまなパーツを追加する
メソッド* addTextBody()、addPart()、および addBinaryBody()を使用すると、単純なテキスト、ファイル、ストリーム、およびその他のオブジェクトを *MultipartBuilder に追加できます。 これらの方法を使用して、目的のコンテンツを追加します。
ステップ6-単一のエンティティの構築
ステップ7-RequestBuilderオブジェクトを作成する
クラス RequestBuilder は、パラメーターを追加して要求を作成するために使用されます。 要求のタイプがPUTまたはPOSTの場合、URLエンコードされたエンティティとして要求にパラメーターを追加します。
- post()*メソッドを使用して、(POSTタイプの)RequestBuilderオブジェクトを作成します。 そして、リクエストの送信先のUriをパラメーターとして渡します。
ステップ8-エンティティオブジェクトをRequestBuilderに設定する
ステップ9-HttpUriRequestを構築する
ステップ10-リクエストを実行する
- execute()*メソッドを使用して、前の手順で作成したリクエストを実行します(このメソッドへのパラメーターとしてリクエストをバイパスします)。
例
次の例は、HttpClientライブラリを使用してマルチパートリクエストを送信する方法を示しています。 この例では、ファイルを基にしたマルチパートリクエストを送信しようとしています。
出力
実行すると、上記のプログラムは次の出力を生成します-