標籤:lex 爬取網頁 win64 ace port stc apach final config
我們在爬取網頁的時候,由於需要不斷的訪問目標伺服器,因此給目標伺服器帶來了很多的壓力。
因此,很多訪問量大的伺服器都會有保護措施,如果檢測到我們的行為,可以會禁止我們的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入門三