1. ホーム
  2. ジャワ

CloseableHttpResponse

2022-03-02 10:50:55

最近では、Apacheのhttpclientを使用する場合、Mavenは、最新のバージョン4.3を参照して、プロンプトDefaultHttpClientと他の一般的なクラスがバージョン4.2.3を使用する前に、使用を推奨されていないアイデアを発見、非推奨されていない。 詳細はこちら .

  • DefaultHttpClient  ->  CloseableHttpClient
  • HttpResponse  ->  CloseableHttpResponse

新Apiの公式サンプルは以下の通りです。

Getメソッド。

    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpGet httpGet = new HttpGet("http://targethost/homepage");
    CloseableHttpResponse response1 = httpclient.execute(httpGet);
    // The underlying HTTP connection is still held by the response object
    // to allow the response content to be streamed directly from the network socket.
    // In order to ensure correct deallocation of system resources
    // the user MUST either fully consume the response content or abort request
    // execution by calling CloseableHttpResponse#close().
    // the established http connection, still held by response1, allows us to fetch the returned data from the network socket
    // To free up resources, we must manually consume response1 or cancel the connection (using the close method of the CloseableHttpResponse class)

    try {
        System.out.println(response1.getStatusLine());
        HttpEntity1 entity = response1.getEntity();
        // do something useful with the response body
        // and ensure it is fully consumed
        EntityUtils.consume(entity1);
    } finally {
        response1.close();
    }


ポストメソッド。

    HttpPost httpPost = new HttpPost("http://targethost/login");
    //spliced parameters
    List <NameValuePair> nvps = new ArrayList <NameValuePair>();
    nvps.add(new BasicNameValuePair("username", "vip"));
    nvps.add(new BasicNameValuePair("password", "secret"));
    httpPost.setEntity(new UrlEncodedFormEntity(nvps));
    CloseableHttpResponse response2 = httpclient.execute(httpPost);

    try {
        System.out.println(response2.getStatusLine());
        HttpEntity entity2 = response2.getEntity();
        // do something useful with the response body
        // and ensure it is fully consumed
        // consume the response
        EntityUtils.consume(entity2);
    } finally {
        response2.close();
    }


HttpClientsのソースコードをさらに下に見ていくと、具体的な実装はすべて HttpClientBuilder は、その build というメソッドがあるので、興味のある方はapacheのソースコードを見てください。

    /**
    * Creates {@link CloseableHttpClient} instance with default
    * configuration.
    */
    public static CloseableHttpClient createDefault() {
        return HttpClientBuilder.create().build();
    }





開発環境です。Maven 3.3.9

   IDEA 2016.2.1

  1. <スパン インポート  net.sf.json.JSONArray;  
  2. インポート  net.sf.json.JSONObject;  
  3. インポート  org.apache.http.HttpEntity;  
  4. インポート  org.apache.http.HttpResponse;  
  5. インポート  org.apache.http.client.methods.HttpGet;  
  6. インポート  org.apache.http.impl.client.CloseableHttpClient.CloseableHttpClient.CloseableHttpClient.CloseableHttpClient.CloseableHttpClient を作成します。  
  7. インポート  org.apache.http.impl.client.HttpClientBuilder;  
  8. インポート  org.apache.http.util.EntityUtils;  
  9. <スパン インポート  java.io.IOException。  
  10. インポート  java.util.ArrayList。  
  11. インポート  java.util.List。  
  12. <スパン /**
  13. <スパン  * 2017/8/28にClearwater66によって作成されました。
  14.  */
  15. 公開 クラス  JsonGet {  
  16. 公開 静的 ボイド  main(String[]Args){。  
  17. // HttpClientBuilderの作成
  18.         HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();  
  19. //HttpClient
  20.         CloseableHttpClient closeableHttpClient = httpClientBuilder.build()。  
  21.         HttpGet httpGet =  新しい  HttpGet( "http://android.myapp.com/myapp/app/comment.htm?apkName=com.youcash.ZYWallet&apkCode=157&p=1&fresh= 0.02709822286851704&contextData=" );  
  22.         System.out.println(httpGet.getRequestLine());  
  23. トライ  {  
  24. //getリクエストの実行
  25.             HttpResponse httpResponse = closeableHttpClient.execute(httpGet).HttpResponse = closeableHttpClient.execute(httpGet);  
  26. //応答メッセージの実体を取得する
  27.             HttpEntity entity = httpResponse.getEntity()。  
  28. //レスポンスステータス <スパン
  29.             System.out.println( ステータス:"  + httpResponse.getStatusLine())。  
  30. // レスポンス・エンティティが空であるかどうかを判定します
  31. もし  (エンティティ ! =  ヌル ) {  
  32.                 System.out.println( contentEncoding:"  + entity.getContentEncoding());  
  33.                 parseJsonGet(EntityUtils.toString(entity)) を実行します。  
  34.             }  
  35.         }  キャッチ  (IOExceptionのe) {。  
  36.             e.printStackTrace()を実行します。  
  37.         }  最後に  {  
  38. トライ  {                 //ストリームを閉じ、リソースを解放する
  39.                 closeableHttpClient.close()を実行します。  
  40.             }  キャッチ  (IOExceptionのe) {。  
  41.                 e.printStackTrace()を実行します。  
  42.             }  
  43.         }  
  44.     }  
  45. // Jsonデータのパース
  46. 公開 静的 ボイド  parseJsonGet(文字列jsonString){。  
  47.         JSONObject jsonObject = JSONObject.fromObject(jsonString);  
  48. //AppCommentsData クラスは、コメントの著者、コメントの内容などを保持します。
  49.         リスト<AppCommentsData> リスト =.  新規  ArrayList<AppCommentsData>();  
  50.         JSONObject obj= jsonObject.getJSONObject()です。 obj" );  
  51. <スパン // 製品レビュー情報 <スパン
  52.         JSONArray jsonArray = obj.getJSONArray() コメント詳細です。 );  
  53. について ( int  i = 0 ;i<jsonArray.size();i++){。  
  54.             AppCommentsData appCommentsData =  新規  AppCommentsData()。  
  55.             appCommentsData.setApp_id( 1 );  
  56.             appCommentsData.setStore_id( 1011 );  
  57. //コメント作成者
  58.             appCommentsData.setAuthor(jsonArray.getJSONObject(i).getString() ニックネーム" ));  
  59. // 製品レビューコンテンツ
  60.             appCommentsData.setData(jsonArray.getJSONObject(i).getString() コンテンツ" ));  
  61. <スパン //評価
  62.             appCommentsData.setScore(jsonArray.getJSONObject(i).getInt() スコア" ));  
  63.             list.add(appCommentsData)を実行します。  
  64.         }  
  65.         System.out.println( appCommentsData//"を出力します。 );  
  66. について  ( int  i= 0 <スパン ;i<list.size();i++){。  
  67.             AppCommentsData appCommentsData = list.get(i);  
  68.             System.out.println( 名前:=" +appCommentsData.getAuthor())。  
  69.             System.out.println( "コンテンツ: =" +appCommentsData.getData())。  
  70.             System.out.println( "スコア: =" +appCommentsData.getScore())となります。  
  71.         }  
  72.     }  
  73. }  
AppCommentsDataクラスは、以下の通りです。

[html】をご覧ください。] 表示プレーン コピー
  1. /**  
  2.  * 2017/8/22にClearwater66によって作成されました。  
  3.  */  
  4. public class AppCommentsData {  
  5.     int idを指定します。  
  6.     int app_id;//アプリのID  
  7.     int store_id;// アプリストアID  
  8.     文字列 author;//レビュアー  
  9.     int score;//score  
  10.     文字列データ;//コメント内容  
  11.     //ゲッターメソッドとセッターメソッドを生成する  
  12. }  
注;1)コメント内容を取得し、MySQLデータベースに挿入する際に、コメント内容に顔文字があることを報告するのは、コメント内容に 不正な文字列値:'˶‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾',....  エラーになりました。

2) ウェブでは、UTF-8をutf8mb4に変更することを提案していますが、これに関するいくつかの投稿を試しても成功しませんでした。

        3) コメント内容から式を削除し、データベースに挿入してみた

  1. 文字列の内容 = jsonArray.getJSONObject(i).getString() コンテンツ" ).replaceAll( "[\\x{10000}-\\x{10FFFF}]"