ケースを取得します:
Mavenのプロジェクト、依存性の導入を作成します。1.:
< 依存性> <! - HttpClientを- > < 依存> < groupIdを> org.apache.httpcomponents </ groupIdを> < たartifactId > HTTPClientの</ たartifactId > < バージョン> 4.5.3 </ バージョン> </ 依存関係> <! - 日志- > < 依存> < groupIdを> org.slf4j </ groupIdを> <たartifactId> SLF4J-log4j12 </ たartifactId > < バージョン> 1.7.25 </ バージョン> </ 依存関係> <! - JUnitの- > < 依存> < groupIdを> JUnitの</ groupIdを> < たartifactId > JUnitの</ たartifactId > < バージョン> 4.12 </ バージョン> </ 依存関係> </ 依存関係>
2.追加log4j.properties
log4j.rootLogger = DEBUG、A1
log4j.logger.com.fgy = DEBUG
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1。 layout.ConversionPattern =% - D {YYYY-MM-DD HH:MM:SS、SSS} [%T] [%C] - [%P]%のm個の%nを
テストコード、データ・キャプチャーを書く3。
@Test 公共 ボイド testFirst()スローIOExceptionが{ CloseableHttpClientクライアント = HttpClients.createDefault()。 HTTPGET HTTPGET = 新 HTTPGET( "https://www.cnblogs.com/roadlandscape/" ); CloseableHttpResponse応答 = client.execute(HTTPGET)。 もし(response.getStatusLine()getStatusCode()== 200 ){ 文字列のコンテキスト = EntityUtils.toString(response.getEntity()、 "UTF-8" )。 System.out.println(コンテキスト)。 } }
パラメータを指定して要求をGET:
@Test 公共 ボイドtestGetParam(){ CloseableHttpClientクライアント = HttpClients.createDefault()。 // HTTPGET HTTPGET =新HTTPGET( " https://s.taobao.com/search?q=vivo "); CloseableHttpResponse応答= nullを。 試す{ URIBuilderビルダー = 新しい URIBuilder( "https://s.taobao.com/search" ); builder.addParameter( "Q"、 "インビボ" )。 HTTPGET HTTPGET = 新しいHTTPGET(builder.build()); 応答 = client.execute(HTTPGET)。 もし(response.getStatusLine()getStatusCode()== 200 ){ 文字列のコンテキスト = EntityUtils.toString(response.getEntity()、 "UTF-8" )。 System.out.println(コンテキスト)。 } } キャッチ(例外e){ e.printStackTrace(); } 最後に{ 場合(!応答= ヌル){ 試み{ response.close(); } キャッチ(IOExceptionを電子){ e.printStackTrace(); } } してみてください { client.close(); } キャッチ(IOExceptionを電子){ e.printStackTrace(); } } }
POSTリクエスト:
@Test 公共 ボイドtestPost(){ CloseableHttpClientクライアント = HttpClients.createDefault()。 HttpPost httpPost = 新 HttpPost( "https://www.cnblogs.com/roadlandscape/" ); CloseableHttpResponse応答 = nullを。 試す{ 応答 = client.execute(httpPost)。 もし(response.getStatusLine()getStatusCode()== 200 ){ 文字列のコンテキスト = EntityUtils.toString(response.getEntity()、 "UTF-8" )。 System.out.println(コンテキスト)。 } } キャッチ(IOExceptionを電子){ e.printStackTrace(); } 最後に{ 場合(!応答= ヌル){ 試み{ response.close(); } キャッチ(IOExceptionを電子){ e.printStackTrace(); } } 試み{ client.close()。 } キャッチ(IOExceptionを電子){ e.printStackTrace(); } } }
パラメータを持つPOSTリクエスト:
@Test 公共 ボイドtestPostParam(){ CloseableHttpClientクライアント = HttpClients.createDefault()。 CloseableHttpResponse応答 = nullを。 試す{ HttpPost httpPost = 新 HttpPost( "https://s.taobao.com/search" ); // 创建存放参数的リスト 一覧<のNameValuePair>のparams = 新しい ArrayListを<> (); params.add(新 BasicNameValuePair( "Q"、 "生体内" )); // 创建表单数据エンティティ UrlEncodedFormEntityエンティティ= 新しいですUrlEncodedFormEntity(paramsは、 "UTF-8" )。 // 设置表单エンティティ到httpPost中 httpPost.setEntity(エンティティ)。 応答 = client.execute(httpPost)。 もし(response.getStatusLine()getStatusCode()== 200 ){ 文字列のコンテキスト = EntityUtils.toString(response.getEntity()、 "UTF-8" )。 System.out.println(コンテキスト)。 } } キャッチ(例外e){ e.printStackTrace(); } 最後に{ 場合(レスポンス!= nullの){ 試み { )(response.close。 } キャッチ(IOExceptionを電子){ e.printStackTrace(); } } 試み{ client.close()。 } キャッチ(IOExceptionを電子){ e.printStackTrace(); } } }
接続プーリング:
各要求は、HttpClientをを作成する必要がある場合、あなたはこの問題を解決するために、接続プーリングを使用することができ、問題が頻繁に作成および破棄があるでしょう。
パブリック クラスConPool { 公共 静的 ボイドメイン(文字列[]引数)がスローにIOException { PoolingHttpClientConnectionManager CM&LT = 新しい新; PoolingHttpClientConnectionManager() // 接続の最大数を設定 cm.setMaxTotalを(200で); // セット同時各ホストの数 cm.setDefaultMaxPerRouteを(20である); のdoGet(CM&LT); } プライベート 静的 ボイドのdoGet(CM&PoolingHttpClientConnectionManager LT)はスローにIOException { CloseableHttpClientクライアント =。HttpClients.custom()setConnectionManager(CM&LT).build(); HTTPGET HTTPGET = 新しい新 HTTPGET( "https://www.cnblogs.com/roadlandscape/" ); // 設定要求パラメータ RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout( 1000)// 接続を作成するための最大時間を設定 .setConnectionRequestTimeoutを(500)// 検索された最大時間を設定は、接続された .setSocketTimeout(10×1000)// 設計データの最大時間は、送信 (.build)を、 HTTPGET .setConfig(requestConfig); CloseableHttpResponse応答 = client.execute(HTTPGET)。 もし(response.getStatusLine()getStatusCode()== 200 ){ 文字列のコンテキスト = EntityUtils.toString(response.getEntity()、 "UTF-8" )。 System.out.println(コンテキスト)。 } } }
1.1.1。 コードを記述