1. 程式人生 > >HttpClient配置及示例代碼

HttpClient配置及示例代碼

現在 generated null 編碼 程序 可能 void 資源 內容

HttpComponents是Apache 旗下的項目。其中有一個HttpClient,即HTTP客戶端。

...

...

技術分享

大多時候我們只需要HttpClient,httpCore是開發服務端的我們可以一般都不需要。

技術分享

之後我們建立項目,導入jar包,開始開發

技術分享

第一個示例:

package com.zhi.httpClient;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class Demo {
	public static void main(String[] args) {
		CloseableHttpClient closeableHttpClient=HttpClients.createDefault(); //1、創建實例
		//CloseableHttpClient意思是:可關閉的
		HttpGet httpGet=new HttpGet("http://www.huimsoft.com"); //2、創建實例
		
		//限制類型http://www.tuicool.com/
		
		CloseableHttpResponse closeableHttpResponse=null;
		try {
			closeableHttpResponse=closeableHttpClient.execute(httpGet); //3、執行
		} catch (ClientProtocolException e) { //客戶端協議異常
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) { //IO異常
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		HttpEntity httpEntity=closeableHttpResponse.getEntity(); //4、獲取實體

		String str="";
		try {
			str=EntityUtils.toString(httpEntity, "utf-8"); //獲取網頁內容,並且指定編碼
		} catch (ParseException e) { //解析異常
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(str);
		
		//關閉closeableHttpResponse
		try {
			closeableHttpResponse.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//關閉closeableHttpClient
		try {
			closeableHttpClient.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  代碼有很多,但是很多是在處理異常,所以我們也可以使用throws在方法上拋出,以簡化代碼格式,讓其更好看。

package com.zhi.httpClient;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class Test {
	public static void main(String[] args) throws Exception {
		CloseableHttpClient closeableHttpClient=HttpClients.createDefault(); //1、創建實例
		HttpGet httpGet=new HttpGet("http://www.huimsoft.com"); //2、創建實例
		
		CloseableHttpResponse closeableHttpResponse=closeableHttpClient.execute(httpGet); //3、執行
		HttpEntity httpEntity=closeableHttpResponse.getEntity(); //4、獲取實體
		System.out.println(EntityUtils.toString(httpEntity, "utf-8")); //5、獲取網頁內容,並且指定編碼
		
		closeableHttpResponse.close();
		closeableHttpClient.close();
	}
}

  當然我們要封裝一個方法,然後使用throws拋出,最好不要在main上直接拋出異常。

其實有些網站讀取時是有延時的,這個時候才用try...catch來處理比較好。

HTTP 協議可能是現在 Internet 上使用得最多、最重要的協議了,越來越多的 Java 應用程序需要直接通過 HTTP 協議來訪問網絡資源。雖然在 JDK 的 java net包中已經提供了訪問 HTTP 協議的基本功能,但是對於大部分應用程序來說,JDK 庫本身提供的功能還不夠豐富和靈活。

搞爬蟲,主要是用HttpClient模擬瀏覽器請求第三方站點url,然後響應,獲取網頁數據,然後用Jsoup來提取我們需要的信息。

HttpClient配置及示例代碼