1. 程式人生 > 實用技巧 >HttpClient入門學習一

HttpClient入門學習一

1、HttpClient 是Apache Jakarta Common 下的子專案,可以用來提供高效的、最新的、功能豐富的支援 HTTP 協議的客戶端程式設計工具包,並且它支援 HTTP 協議最新的版本和建議。

  雖然在 JDK 的 java net包中已經提供了訪問 HTTP 協議的基本功能,但是對於大部分應用程式來說,JDK 庫本身提供的功能還不夠豐富和靈活。HttpClient 是 Apache Jakarta Common 下的子專案,用來提供高效的、最新的、功能豐富的支援 HTTP 協議的客戶端程式設計工具包,並且它支援 HTTP 協議最新的版本和建議。

  HttpClient相比傳統JDK自帶的URLConnection,增加了易用性和靈活性,它不僅使客戶端傳送Http請求變得容易,而且也方便開發人員測試介面(基於Http協議的),提高了開發的效率,也方便提高程式碼的健壯性。

2、org.apache.commons.httpclient.HttpClient與org.apache.http.client.HttpClient的區別?

  org.apache.commons.httpclient.HttpClient的HttpClient專案已經不再被開發新版本, 已被Apache HttpComponents專案HttpClient和HttpCore 模組取代,提供更好的效能和更大的靈活性,所以在開發中使用後者來學習或者實踐的哦!

3、HttpClient 提供的主要功能,如下所示:

  1)、實現了所有 HTTP 的方法(Get、Post、Put、Head 等)。
  2)、支援自動轉向。
  3)、支援 HTTPS 協議。
  4)、支援代理伺服器等。

4、httpClient的使用方法,使用HttpClient傳送請求、接收響應很簡單,一般需要如下幾步即可,如下所示:

  1)、建立HttpClient物件。
  2)、建立請求方法的例項,並指定請求URL。如果需要傳送GET請求,建立HttpGet物件。如果需要傳送POST請求,建立HttpPost物件。
  3)、如果需要傳送請求引數,可呼叫HttpGet、HttpPost共同的setParams(HttpParams params)方法來新增請求引數。對於HttpPost物件而言,也可呼叫setEntity(HttpEntity entity)方法來設定請求引數。
  4)、呼叫HttpClient物件的execute(HttpUriRequest request)傳送請求,該方法返回一個HttpResponse。
  5)、呼叫HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取伺服器的響應頭;呼叫HttpResponse的getEntity()方法可獲取HttpEntity物件,該物件包裝了伺服器的響應內容,此時可以對返回的結果進行處理和操作。程式可通過該物件獲取伺服器的響應內容。
  6)、釋放連線。無論執行方法是否成功,都必須釋放連線。

 1 <project xmlns="http://maven.apache.org/POM/4.0.0"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
 4     http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.bie</groupId>
 8     <artifactId>httpClient</artifactId>
 9     <version>0.0.1-SNAPSHOT</version>
10     <packaging>jar</packaging>
11 
12     <name>httpClient</name>
13     <url>http://maven.apache.org</url>
14 
15     <properties>
16         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
17     </properties>
18 
19     <dependencies>
20         <dependency>
21             <groupId>junit</groupId>
22             <artifactId>junit</artifactId>
23             <version>3.8.1</version>
24             <scope>test</scope>
25         </dependency>
26         <!-- httpclient的版本是4.5.2 -->
27         <dependency>
28             <groupId>org.apache.httpcomponents</groupId>
29             <artifactId>httpclient</artifactId>
30             <version>4.5.2</version>
31         </dependency>
32         <!-- apache流相關的依賴 -->
33         <dependency>
34             <groupId>commons-io</groupId>
35             <artifactId>commons-io</artifactId>
36             <version>2.5</version>
37         </dependency>
38     </dependencies>
39 
40 </project>

案例,程式碼,如下所示:

 1 package com.bie.httpClient;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.http.HttpEntity;
 6 import org.apache.http.ParseException;
 7 import org.apache.http.client.ClientProtocolException;
 8 import org.apache.http.client.methods.CloseableHttpResponse;
 9 import org.apache.http.client.methods.HttpGet;
10 import org.apache.http.impl.client.CloseableHttpClient;
11 import org.apache.http.impl.client.HttpClients;
12 import org.apache.http.util.EntityUtils;
13 
14 /**
15  * 
16  * @author
17  *
18  */
19 public class HttpClientHello {
20 
21     /**
22      * HttpGet請求操作
23      */
24     public static void httpGetRequest() {
25         // 第一步,獲取到httpClient客戶端例項,獲取到一個可關閉的httpClient客戶端例項。
26         CloseableHttpClient httpClient = HttpClients.createDefault();
27         // 第二步,建立HttpGet或者HttpPost例項。
28         String uri = "https://www.cnblogs.com/";
29         HttpGet httpGet = new HttpGet(uri);
30         // 定義一個可響應的例項物件。
31         CloseableHttpResponse response = null;
32         try {
33             // 第三步,釋出一個請求,使用httpClient例項傳送一個http協議的Get請求。
34             response = httpClient.execute(httpGet);
35         } catch (ClientProtocolException e) {
36             // http協議異常
37             e.printStackTrace();
38         } catch (IOException e) {
39             // io異常
40             e.printStackTrace();
41         }
42         // 第四步,獲取到返回的實體物件
43         HttpEntity entity = response.getEntity();
44         // 將返回結果轉換為字串進行檢視(網頁內容),引數一是請求返回的entity,引數二是字符集編碼
45         String result = null;
46         try {
47             result = EntityUtils.toString(entity, "UTF-8");
48         } catch (ParseException e) {
49             e.printStackTrace();
50         } catch (IOException e) {
51             e.printStackTrace();
52         }
53         // 列印請求返回的結果
54         System.out.println(result.toString());
55 
56         // 第五步,關閉流,釋放資源
57         try {
58             response.close();
59             httpClient.close();
60         } catch (IOException e) {
61             e.printStackTrace();
62         }
63     }
64 
65     public static void main(String[] args) {
66         HttpClientHello.httpGetRequest();
67     }
68 
69 }

5、設定請求頭訊息 User-Agent 模擬各種不同的瀏覽器,可以獲取到不讓你隨便獲取到頁面。獲取響應內容型別 Content-Type,可以根據此響應型別來過濾出自己想要的或者不想要的內容資訊。獲取響應狀態 Status,根據響應的狀態碼來判斷請求是否成功。

 1 package com.bie.httpClient.httpGet;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.http.Header;
 6 import org.apache.http.HttpEntity;
 7 import org.apache.http.ParseException;
 8 import org.apache.http.StatusLine;
 9 import org.apache.http.client.ClientProtocolException;
10 import org.apache.http.client.methods.CloseableHttpResponse;
11 import org.apache.http.client.methods.HttpGet;
12 import org.apache.http.impl.client.CloseableHttpClient;
13 import org.apache.http.impl.client.HttpClients;
14 import org.apache.http.util.EntityUtils;
15 
16 /**
17  * 
18  * @author
19  *
20  */
21 public class HttpClientHttpGet {
22 
23     // 設定請求頭訊息 User-Agent 模擬瀏覽器
24     private static String UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0";
25 
26     /**
27      * HttpGet請求操作
28      */
29     public static void httpGetRequest() {
30         // 第一步,獲取到httpClient客戶端例項,獲取到一個可關閉的httpClient客戶端例項。
31         CloseableHttpClient httpClient = HttpClients.createDefault();
32         // 第二步,建立HttpGet或者HttpPost例項。
33         String uri = "https://www.tuicool.com/";
34         HttpGet httpGet = new HttpGet(uri);
35         // 設定請求頭訊息 User-Agent 模擬瀏覽器
36         httpGet.setHeader("User-Agent", UserAgent);
37         
38         // 定義一個可響應的例項物件。
39         CloseableHttpResponse response = null;
40         try {
41             // 第三步,釋出一個請求,使用httpClient例項傳送一個http協議的Get請求。
42             response = httpClient.execute(httpGet);
43             // 獲取到響應的狀態
44             StatusLine statusLine = response.getStatusLine();
45             System.out.println("響應狀態: " + statusLine.toString() + ", 響應碼: " + statusLine.getStatusCode());
46         } catch (ClientProtocolException e) {
47             // http協議異常
48             e.printStackTrace();
49         } catch (IOException e) {
50             // io異常
51             e.printStackTrace();
52         }
53         // 第四步,獲取到返回的實體物件
54         HttpEntity entity = response.getEntity();
55         // 獲取響應內容型別 Content-Type,獲取到響應型別,從而過濾一些不想要的東西
56         Header contentType = entity.getContentType();
57         // 列印響應資訊
58         System.out.println("name : " + contentType.getName() + " , value: " + contentType.getValue());
59         
60         // 將返回結果轉換為字串進行檢視(網頁內容),引數一是請求返回的entity,引數二是字符集編碼
61         String result = null;
62         try {
63             result = EntityUtils.toString(entity, "UTF-8");
64         } catch (ParseException e) {
65             e.printStackTrace();
66         } catch (IOException e) {
67             e.printStackTrace();
68         }
69         // 列印請求返回的結果
70         // System.out.println(result.toString());
71 
72         // 第五步,關閉流,釋放資源
73         try {
74             response.close();
75             httpClient.close();
76         } catch (IOException e) {
77             e.printStackTrace();
78         }
79     }
80 
81     public static void main(String[] args) {
82         HttpClientHttpGet.httpGetRequest();
83     }
84 
85 }

6、如何獲取網上的一張圖片,然後儲存到本地的操作,程式碼如下所示:

 1 package com.bie.httpClient.getImage;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 
 7 import org.apache.commons.io.FileUtils;
 8 import org.apache.http.Header;
 9 import org.apache.http.HttpEntity;
10 import org.apache.http.ParseException;
11 import org.apache.http.StatusLine;
12 import org.apache.http.client.ClientProtocolException;
13 import org.apache.http.client.methods.CloseableHttpResponse;
14 import org.apache.http.client.methods.HttpGet;
15 import org.apache.http.impl.client.CloseableHttpClient;
16 import org.apache.http.impl.client.HttpClients;
17 
18 /**
19  * 
20  * @author
21  *
22  */
23 public class HttpClientGetImage {
24 
25     // 設定請求頭訊息 User-Agent 模擬瀏覽器
26     private static String UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0";
27 
28     /**
29      * HttpGet請求操作
30      */
31     public static void httpGetRequest() {
32         // 第一步,獲取到httpClient客戶端例項,獲取到一個可關閉的httpClient客戶端例項。
33         CloseableHttpClient httpClient = HttpClients.createDefault();
34         // 第二步,建立HttpGet或者HttpPost例項。
35         String uri = "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=179511720,320422354&fm=26&gp=0.jpg";
36         HttpGet httpGet = new HttpGet(uri);
37         // 設定請求頭訊息 User-Agent 模擬瀏覽器
38         httpGet.setHeader("User-Agent", UserAgent);
39 
40         // 定義一個可響應的例項物件。
41         CloseableHttpResponse response = null;
42         try {
43             // 第三步,釋出一個請求,使用httpClient例項傳送一個http協議的Get請求。
44             response = httpClient.execute(httpGet);
45             // 獲取到響應的狀態
46             StatusLine statusLine = response.getStatusLine();
47             System.out.println("響應狀態: " + statusLine.toString() + ", 響應碼: " + statusLine.getStatusCode());
48         } catch (ClientProtocolException e) {
49             // http協議異常
50             e.printStackTrace();
51         } catch (IOException e) {
52             // io異常
53             e.printStackTrace();
54         }
55         // 第四步,獲取到返回的實體物件
56         HttpEntity entity = response.getEntity();
57         // 獲取響應內容型別 Content-Type,獲取到響應型別,從而過濾一些不想要的東西
58         Header contentType = entity.getContentType();
59         // 列印響應資訊
60         System.out.println("name : " + contentType.getName() + " , value: " + contentType.getValue());
61 
62         // 將返回結果轉換為字串進行檢視(網頁內容),引數一是請求返回的entity,引數二是字符集編碼
63         String result = null;
64         try {
65             // 判斷entity是否為空
66             if (entity != null) {
67                 InputStream content = entity.getContent();
68                 // 將下載的內容拷貝到指定的資料夾下面
69                 File file = new File("F:\\" + "hashiqi.jpg");
70                 FileUtils.copyToFile(content, file);
71                 System.out.println("--------------------------------執行成功--------------------------------");
72             }
73         } catch (ParseException e) {
74             e.printStackTrace();
75         } catch (IOException e) {
76             e.printStackTrace();
77         }
78         // 第五步,關閉流,釋放資源
79         try {
80             response.close();
81             httpClient.close();
82         } catch (IOException e) {
83             e.printStackTrace();
84         }
85     }
86 
87     public static void main(String[] args) {
88         HttpClientGetImage.httpGetRequest();
89     }
90 
91 }

7、httpClient使用代理ip,在爬取網頁的時候,有的目標站點有反爬蟲機制,對於頻繁訪問站點以及規則性訪問站點的行為,會採取遮蔽ip的措施,這時候使用代理Ip就有大用處了。代理ip分為透明代理,匿名代理,混淆代理,高匿代理。

  1)、透明代理(Transparent Proxy),透明代理雖然可以直接“隱藏”你的IP地址,但是還是可以從HTTP_X_FORWARDED_FOR來查到你是誰。
  2)、匿名代理(Anonymous Proxy),匿名代理比透明代理進步了一點:別人只能知道你用了代理,無法知道你是誰。
  3)、混淆代理(Distorting Proxies),與匿名代理相同,如果使用了混淆代理,別人還是能知道你在用代理,但是會得到一個假的IP地址,找不到你。
  4)、高匿代理(Elite proxy或High Anonymity Proxy),可以看出來,高匿代理讓別人根本無法發現你是在用代理,所以是最好的選擇。

代理IP :http://www.66ip.cn/index.html,更多的可以百度。

 1 package com.bie.httpClient.ip;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.http.Header;
 6 import org.apache.http.HttpEntity;
 7 import org.apache.http.HttpHost;
 8 import org.apache.http.ParseException;
 9 import org.apache.http.StatusLine;
10 import org.apache.http.client.ClientProtocolException;
11 import org.apache.http.client.config.RequestConfig;
12 import org.apache.http.client.methods.CloseableHttpResponse;
13 import org.apache.http.client.methods.HttpGet;
14 import org.apache.http.impl.client.CloseableHttpClient;
15 import org.apache.http.impl.client.HttpClients;
16 import org.apache.http.util.EntityUtils;
17 
18 /**
19  * 
20  * @author
21  *
22  */
23 public class HttpClientProxyIp {
24 
25     // 設定請求頭訊息 User-Agent 模擬瀏覽器
26     private static String UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0";
27 
28     /**
29      * HttpGet請求操作
30      */
31     public static void httpGetRequest() {
32         // 第一步,獲取到httpClient客戶端例項,獲取到一個可關閉的httpClient客戶端例項。
33         CloseableHttpClient httpClient = HttpClients.createDefault();
34         // 第二步,建立HttpGet或者HttpPost例項。
35         String uri = "http://www.baidu.com/";
36         HttpGet httpGet = new HttpGet(uri);
37         // 設定請求頭訊息 User-Agent 模擬瀏覽器
38         httpGet.setHeader("User-Agent", UserAgent);
39 
40         // 設定ip代理,這裡設定高匿代理
41         HttpHost proxy = new HttpHost("183.195.106.118", 8118);
42         RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
43         httpGet.setConfig(config);
44 
45         // 定義一個可響應的例項物件。
46         CloseableHttpResponse response = null;
47         try {
48             // 第三步,釋出一個請求,使用httpClient例項傳送一個http協議的Get請求。
49             response = httpClient.execute(httpGet);
50             // 獲取到響應的狀態
51             StatusLine statusLine = response.getStatusLine();
52             System.out.println("響應狀態: " + statusLine.toString() + ", 響應碼: " + statusLine.getStatusCode());
53         } catch (ClientProtocolException e) {
54             // http協議異常
55             e.printStackTrace();
56         } catch (IOException e) {
57             // io異常
58             e.printStackTrace();
59         }
60         // 第四步,獲取到返回的實體物件
61         HttpEntity entity = response.getEntity();
62         // 獲取響應內容型別 Content-Type,獲取到響應型別,從而過濾一些不想要的東西
63         Header contentType = entity.getContentType();
64         // 列印響應資訊
65         System.out.println("name : " + contentType.getName() + " , value: " + contentType.getValue());
66 
67         // 將返回結果轉換為字串進行檢視(網頁內容),引數一是請求返回的entity,引數二是字符集編碼
68         String result = null;
69         try {
70             result = EntityUtils.toString(entity, "UTF-8");
71         } catch (ParseException e) {
72             e.printStackTrace();
73         } catch (IOException e) {
74             e.printStackTrace();
75         }
76         // 列印請求返回的結果
77         System.out.println(result.toString());
78 
79         // 第五步,關閉流,釋放資源
80         try {
81             response.close();
82             httpClient.close();
83         } catch (IOException e) {
84             e.printStackTrace();
85         }
86     }
87 
88     public static void main(String[] args) {
89         System.out.println(System.currentTimeMillis());
90         HttpClientProxyIp.httpGetRequest();
91         System.out.println(System.currentTimeMillis());
92     }
93 
94 }

8、HttpClient連線超時及讀取超時問題,httpClient在執行具體http請求時候 有一個連線的時間和讀取內容的時間。

  1)、HttpClient連線時間,所謂連線的時間,是指HttpClient傳送請求的地方開始到連線上目標url主機地址的時間,理論上是距離越短越快。

  2)、HttpClient讀取時間,所謂讀取的時間,是指HttpClient已經連線到了目標伺服器,然後進行內容資料的獲取,一般情況 讀取資料都是很快速的,但是假如讀取的資料量大,或者是目標伺服器本身的問題(比如讀取資料庫速度慢,併發量大等等)也會影響讀取時間。

 1 package com.bie.httpClient.timeout;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.http.Header;
 6 import org.apache.http.HttpEntity;
 7 import org.apache.http.ParseException;
 8 import org.apache.http.StatusLine;
 9 import org.apache.http.client.ClientProtocolException;
10 import org.apache.http.client.config.RequestConfig;
11 import org.apache.http.client.methods.CloseableHttpResponse;
12 import org.apache.http.client.methods.HttpGet;
13 import org.apache.http.impl.client.CloseableHttpClient;
14 import org.apache.http.impl.client.HttpClients;
15 import org.apache.http.util.EntityUtils;
16 
17 /**
18  * 
19  * @author
20  *
21  */
22 public class HttpClientTimeOut {
23 
24     // 設定請求頭訊息 User-Agent 模擬瀏覽器
25     private static String UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0";
26 
27     /**
28      * HttpGet請求操作
29      */
30     public static void httpGetRequest() {
31         // 第一步,獲取到httpClient客戶端例項,獲取到一個可關閉的httpClient客戶端例項。
32         CloseableHttpClient httpClient = HttpClients.createDefault();
33         // 第二步,建立HttpGet或者HttpPost例項。
34         String uri = "https://www.baidu.com/";
35         HttpGet httpGet = new HttpGet(uri);
36         // 設定請求頭訊息 User-Agent 模擬瀏覽器
37         httpGet.setHeader("User-Agent", UserAgent);
38 
39         // HttpClient提供了一個RequestConfig類,專門用於配置引數比如連線時間、讀取時間、代理IP等。
40         RequestConfig config = RequestConfig
41                 .custom()
42                 .setConnectTimeout(5000) // 設定連線時間5秒鐘
43                 .setSocketTimeout(5000) // 設定響應時間5秒鐘
44                 .build();
45         httpGet.setConfig(config);
46 
47         // 定義一個可響應的例項物件。
48         CloseableHttpResponse response = null;
49         try {
50             // 第三步,釋出一個請求,使用httpClient例項傳送一個http協議的Get請求。
51             response = httpClient.execute(httpGet);
52             // 獲取到響應的狀態
53             StatusLine statusLine = response.getStatusLine();
54             System.out.println("響應狀態: " + statusLine.toString() + ", 響應碼: " + statusLine.getStatusCode());
55         } catch (ClientProtocolException e) {
56             // http協議異常
57             e.printStackTrace();
58         } catch (IOException e) {
59             // io異常
60             e.printStackTrace();
61         }
62         // 第四步,獲取到返回的實體物件
63         HttpEntity entity = response.getEntity();
64         
65         // 獲取響應內容型別 Content-Type,獲取到響應型別,從而過濾一些不想要的東西
66         Header contentType = entity.getContentType();
67         // 列印響應資訊
68         System.out.println("name : " + contentType.getName() + " , value: " + contentType.getValue());
69         
70         // 將返回結果轉換為字串進行檢視(網頁內容),引數一是請求返回的entity,引數二是字符集編碼
71         String result = null;
72         try {
73             result = EntityUtils.toString(entity, "UTF-8");
74         } catch (ParseException e) {
75             e.printStackTrace();
76         } catch (IOException e) {
77             e.printStackTrace();
78         }
79         // 列印請求返回的結果
80         System.out.println(result.toString());
81 
82         // 第五步,關閉流,釋放資源
83         try {
84             response.close();
85             httpClient.close();
86         } catch (IOException e) {
87             e.printStackTrace();
88         }
89     }
90 
91     public static void main(String[] args) {
92         HttpClientTimeOut.httpGetRequest();
93     }
94 
95 }

9、可以使用httpPost請求來模擬表單請求操作,非常適合於介面測試,當然也有很多工具來進行介面測試,比如Postman等等,如下所示:

 1 package com.bie.httpClient.httpPost;
 2 
 3 import java.io.IOException;
 4 import java.util.ArrayList;
 5 import java.util.List;
 6 
 7 import org.apache.http.HttpEntity;
 8 import org.apache.http.NameValuePair;
 9 import org.apache.http.ParseException;
10 import org.apache.http.client.ClientProtocolException;
11 import org.apache.http.client.entity.UrlEncodedFormEntity;
12 import org.apache.http.client.methods.CloseableHttpResponse;
13 import org.apache.http.client.methods.HttpPost;
14 import org.apache.http.impl.client.CloseableHttpClient;
15 import org.apache.http.impl.client.HttpClients;
16 import org.apache.http.message.BasicNameValuePair;
17 import org.apache.http.util.EntityUtils;
18 
19 /**
20  * 
21  * @author
22  *
23  */
24 public class HttpClientHttpPost {
25 
26     /**
27      * HttpGet請求操作
28      */
29     public static void httpGetRequest() {
30         // 獲取到開始時間
31         long startTime = System.currentTimeMillis();
32         // 第一步,獲取到httpClient客戶端例項,獲取到一個可關閉的httpClient客戶端例項。
33         CloseableHttpClient httpClient = HttpClients.createDefault();
34         // 第二步,建立HttpGet或者HttpPost例項。
35         String uri = "http://127.0.0.1:8080/login";
36         HttpPost httpPost = new HttpPost(uri);
37         // 定義一個可響應的例項物件。
38         CloseableHttpResponse response = null;
39         try {
40             // 定義一個List集合用於儲存表單請求資料
41             List<NameValuePair> list = new ArrayList<NameValuePair>();
42             list.add(new BasicNameValuePair("userName", "admin"));
43             list.add(new BasicNameValuePair("password", "123456"));
44 
45             // 定義一個表單實體物件,設定字符集編碼為utf-8
46             UrlEncodedFormEntity uefEntity = uefEntity = new UrlEncodedFormEntity(list, "UTF-8");
47             // 將實體物件設定到httpPost請求物件中
48             httpPost.setEntity(uefEntity);
49             System.out.println("executing request " + httpPost.getURI());
50 
51             // 第三步,釋出一個請求,使用httpClient例項傳送一個http協議的Get請求。
52             response = httpClient.execute(httpPost);
53         } catch (ClientProtocolException e) {
54             // http協議異常
55             e.printStackTrace();
56         } catch (IOException e) {
57             // io異常
58             e.printStackTrace();
59         }
60         // 第四步,獲取到返回的實體物件
61         HttpEntity entity = response.getEntity();
62         // 將返回結果轉換為字串進行檢視(網頁內容),引數一是請求返回的entity,引數二是字符集編碼
63         String result = null;
64         try {
65             if (entity != null) {
66                 result = EntityUtils.toString(entity, "UTF-8");
67             }
68         } catch (ParseException e) {
69             e.printStackTrace();
70         } catch (IOException e) {
71             e.printStackTrace();
72         }
73         // 列印請求返回的結果
74         System.out.println(result.toString());
75 
76         long endTime = System.currentTimeMillis();
77         System.out.println("程式執行時間: " + (endTime - startTime) + "ms");
78 
79         // 第五步,關閉流,釋放資源
80         try {
81             response.close();
82             httpClient.close();
83         } catch (IOException e) {
84             e.printStackTrace();
85         }
86     }
87 
88     public static void main(String[] args) {
89         HttpClientHttpPost.httpGetRequest();
90     }
91 
92 }