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 }