HttpClient入門三

來源:互聯網
上載者:User

標籤: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入門三

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.