HTTPデータを交換するための最も一般的な方法のネットワークとして要求、別のHTTPクライアント、ここのHttpClient、okhttp、Jodd-HTTP 3つのプット、比較を行うために、ポストリクエストメソッド意志パフォーマンスの使用に違いがあります。
1 <依存性> 2 <のgroupId> org.jodd </ groupIdを> 3 <たartifactId> jodd-HTTP </たartifactId> 4 <バージョン> 5.1.4 </バージョン> 5 </依存> 6 7 <! - HTTPS:// mvnrepository.com/artifact/com.squareup.okhttp3/okhttp - > 8 <依存性> 9 <のgroupId> com.squareup.okhttp3 </ groupIdを> 10 <たartifactId> okhttp </たartifactId> 11 <バージョン> 4.4。 0 </バージョン> 12 </依存> 13 14 < -のhttps:!//mvnrepository.com/artifact/org.apache.httpcomponents/httpclient - > 15 <依存性> 16 <のgroupId> org.apache.httpcomponents </ groupIdを> 17 <たartifactId> HTTPClientの</たartifactId> 18 <バージョン> 4.5.12 < /バージョン> 19 </依存> 20 21 < -のhttps:// mvnrepository.com/artifact/com.alibaba/fastjson - > 22 <依存> 23 <groupIdを> com.alibaba </ groupIdを> 24 <たartifactId > fastjson </たartifactId> 25 <バージョン> 1.2。 62 </バージョン> 26 </依存関係> 27
ApacheのHttpClientを
次の手順で要求を送信:
- 後者の非同期CloseableHttpClientオブジェクト/ CloseableHttpAsyncClientオブジェクト、元の同期を作成します
- Http具体的なオブジェクトを作成するための要求、例えばHTTPGET、HttpPost
- 実行する前に、startメソッドと呼ばれる非同期要求であれば、要求を実行executeメソッドを呼び出します
リクエストを取得
@Test 公共 無効 testApacheHttpGet(文字列URL)がスローにIOException { // 設定されたタイムアウト RequestConfigコンフィグ= RequestConfig.custom() .setConnectTimeout( 60 * 1000) // 接続時間 .setSocketTimeout(* 1000年60) // サーバからの取得応答をタイムアウトデータ .build(); CloseableHttpClientクライアント = HttpClientBuilder.create()ビルド();. HTTPGET HTTPGET = 新新HTTPGET(URL); httpGet.setConfig(設定); CloseableHttpResponseレスポンス =client.execute(HTTPGET)。 System.out.println(EntityUtils.toString(response.getEntity()))。 }
ポストの要求:
@Test 公共 無効 testApacheHttpPost(文字列のURL)スローIOExceptionが{ CloseableHttpClientクライアント = HttpClientBuilder.create()ビルド(); HttpPost httpPost = 新しいHttpPost(URL); httpPost.setHeader( "コンテンツタイプ"、 "アプリケーション/ JSON;のcharset = UTF8" )。 httpPost.setEntity(新しい StringEntity(新 JSONObject()のtoString())); // 设置请求体 CloseableHttpResponse応答= client.execute(httpPost)。 System.out.println(EntityUtils.toString(response.getEntity()))。 }
okhttp
次の手順で要求を送信:
- OkHttpClientを作成されたオブジェクト
- Requestオブジェクトを作成します。
- コールRequestオブジェクトのカプセル化
- 同期または非同期の要求をコールすることによって行われる、方法を実行する同期実行と呼ばれる、非同期メソッドがエンキューを行う呼び出し
リクエストを取得します:
@Test
公共ボイドtestOkHttpGet(文字列のURL)がスローにIOException {
リクエスト要求=新しいRequest.Builderを()
た.url(URL)
に.get()
.build();
コールコール= okHttpClient.newCall(リクエスト)。 応答レスポンス= call.execute()。 System.out.println(response.body()のtoString())。 }
ポストの要求:
@Test
公共ボイドtestOkHttpPost(文字列のURL)スローIOExceptionが{
JSONObject JSON =新しいJSONObject()。
RequestBody本体= RequestBody.create(MediaType.parse( "アプリケーション/ JSON;のcharset = UTF-8" )、String.valueOf(JSON))。 リクエストビルド=新しいRequest.Builder() する.url(URL) .post(ボディ) .header( "Content-Typeの"、 "アプリケーション/ jsonの;のcharset = UTF8" ).build(); コールコール= okHttpClient.newCall(ビルド)。応答レスポンス= call.execute()。ストリングストリング= response.body()文字列()。}
設定されたタイムアウト
=新しい新しいクライアントOkHttpClient OkHttpClient.Builder()
.connectTimeout(60、TimeUnit.SECONDS)//セット接続時間
読み取りタイムアウトの設定.readTimeout(60、TimeUnit.SECONDS)//
.buildを();
すべての要求が設定アウトこの方法を取られることを意味し、クライアントのタイムアウトを設定します。
Jodd-HTTP
非常に使いやすく、便利な軽量、ネイティブHTTPクライアントを、提供Jodd。
リクエストを取得します:
リクエストパラメータを直接URLの後ろにスプライシングされ得る、方法は、クエリで指定することができます()
@Test 公共 ボイド testJoddHttpGet(文字列URL)がスローにIOException { のHttpResponseレスポンス = のHttpRequest に.get(URL) // 割当要求モード .contentType( "ファイルアプリケーション/ JSON") // エンコード指定 .query( "XXX"、 "XXXを " ) .connectionKeepAlive(真の)// 長い接続 .timeout(60 * 1000) // タイムアウト設定 .send(); // リクエストを送信 するSystem.out.println(response.bodyText()); }
サーバから返された応答データを格納します。応答の例は、以下のような属性の種々から抽出することができるstatusCode()
、またはstatusPhrase()。
応答は、次の3つの方法でレスポンスボディをお読みください。
指定されたヘッダ情報にresponse.bodyText()本文は、符号化された
response.bodyBytesバイト()本体
ISO-8859-1符号化response.bodyを()
ポストの要求:
bodyText当該リクエストボディに保存されています。また、パラメータの形式(「XX」、「XX」)フォームを追加することができます
公共 ボイド testJoddHttpPost(文字列のURL)がスローにIOException { のHttpResponse応答 = のHttpRequest .post(URL) .contentType( "アプリケーション/ JSON" ) .bodyText( "XXX" ) .send(); System.out.println(response.bodyText())。 }
要約:
- 符号量の面ではjodd-HTTP <okhttp <apacheの-HTTP。
- タイムアウト設定は、jodd-httpと設定し、クライアント上のApache-HTTPClientのより柔軟な、okhttp、単一のセットを要求することはできません。