1. 程式人生 > >HttpClient入門三

HttpClient入門三

代理 config .config get todo created .get 靜態方法 class

我們在爬取網頁的時候,由於需要不斷的訪問目標服務器,因此給目標服務器帶來了很多的壓力。

因此,很多訪問量大的服務器都會有保護措施,如果檢測到我們的行為,可以會禁止我們的ip訪問。

這個時候,我們就需要使用到代理ip來進行訪問了。

在HttpCLient中,提供了一個org.apache.http.client.config.RequestConfig這個類,可以通過它的custom()方法,

來取得它的內部類RequestConfig.Builder類來設置請求信息。

實例:

package com.httpclient;

import java.io.IOException;

import
org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; 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 Test03 { public static void main(String[] args) { /** * 使用HttpClents的靜態方法createDefault()創建一個可關閉的Http客戶端 * 這個client中有很多重載的execute方法,可以用來執行請求 */ CloseableHttpClient client
= HttpClients.createDefault(); /** * 創建一個對指定地址的get請求, * 這個請求在執行之後,將會在response中返回一個entity * 在org.apache.http.client.methods包中提供了 * 很多http方法,比如get,post,head之類的 */ HttpGet get=new HttpGet("http://www.tuicool.com/"); //定義一個HttpHost對象,裏面有鏈接到目標服務器所需要的信息 HttpHost proxy=new HttpHost("13.78.125.167",8080); //定義RequestConfig對象。裏面含有一些請求的配置信息 RequestConfig reqeustConfig=RequestConfig.custom().setProxy(proxy).build(); //吧請求的配置設置到get請求中去 get.setConfig(reqeustConfig); //設置請求頭信息中的Agent,模擬瀏覽器 get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0"); CloseableHttpResponse response=null; try { /** * 使用默認的上下文執行請求 * 返回request的response */ response=client.execute(get); //打印出返回的狀態欄 System.out.println(response.getStatusLine()); //從response中獲取entity HttpEntity entity=response.getEntity(); /** * 利用EntityUtils這個工具包中的toString這個靜態方法 * 可以輕松的獲取entity中的內容,並且是以String類型返回 */ System.out.println(EntityUtils.toString(entity,"UTF-8")); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { response.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

在實際的開發中,為了避免ip的限制,我們通常需要動態的更換ip來實現爬取。

HttpClient入門三