国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HttpClient-爬蟲(chóng)

這篇具有很好參考價(jià)值的文章主要介紹了HttpClient-爬蟲(chóng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

4.HttpClient

  1. 網(wǎng)絡(luò)爬蟲(chóng)就是用程序幫助我們?cè)L問(wèn)網(wǎng)絡(luò)上的資源,我們一直以來(lái)都是使用HTTP協(xié)議訪問(wèn)互聯(lián)網(wǎng)的網(wǎng)頁(yè),網(wǎng)絡(luò)爬蟲(chóng)需要編寫(xiě)程序,在這里使用同樣的HTTP協(xié)議訪問(wèn)網(wǎng)頁(yè)。
  2. 這里我們使用Java的HTTP協(xié)議客戶端 HttpClient這個(gè)技術(shù),來(lái)實(shí)現(xiàn)抓取網(wǎng)頁(yè)數(shù)據(jù)。

4.1.GET請(qǐng)求

訪問(wèn)傳智官網(wǎng),請(qǐng)求url地址:
http://www.itcast.cn/

package cn.itcast.crawler.test;

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;

import java.io.IOException;

public class HttpGetTest {
    public static void main(String[] args) {
        // 創(chuàng)建HttpClient對(duì)象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 創(chuàng)建HttpGet對(duì)象 設(shè)置url訪問(wèn)地址
        HttpGet httpGet = new HttpGet("http://www.itcast.cn");
        CloseableHttpResponse response = null;
        try {
            //使用HttpClient發(fā)起請(qǐng)求,獲取response
            response = httpClient.execute(httpGet);
            //解析響應(yīng)
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "utf8");
                System.out.println(content.length());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //關(guān)閉response
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

請(qǐng)求參數(shù)

HttpClient-爬蟲(chóng)

4.2.帶參數(shù)的GET請(qǐng)求

在傳智中搜索學(xué)習(xí)視頻,地址為:http://yun.itheima.com/search?keys=Java

package cn.itcast.crawler.test;

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

import java.io.IOException;
import java.net.URISyntaxException;

public class HttpGetParamTest {
    public static void main(String[] args) throws Exception {
        // 創(chuàng)建HttpClient對(duì)象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 創(chuàng)建HttpGet對(duì)象 設(shè)置url訪問(wèn)地址http://yun.itheima.com/search?keys=Java

        // 創(chuàng)建URLBuilder
        URIBuilder urlBuilder = new URIBuilder("http://yun.itheima.com/search");
        // 設(shè)置參數(shù)
        urlBuilder.setParameter("keys","Java");

        HttpGet httpGet = new HttpGet(urlBuilder.build());

        //System.out.println("發(fā)起請(qǐng)求的信息"+httpGet);//發(fā)起請(qǐng)求的信息GET http://www.itcast.cn HTTP/1.1
        System.out.println("發(fā)起請(qǐng)求的信息"+httpGet); //發(fā)起請(qǐng)求的信息GET http://yun.itheima.com/search?keys=Java HTTP/1.1
        CloseableHttpResponse response = null;
        try {
            //使用HttpClient發(fā)起請(qǐng)求,獲取response
            response = httpClient.execute(httpGet);
            //解析響應(yīng)
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "utf8");
                System.out.println(content.length());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //關(guān)閉response
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

4.3.POST請(qǐng)求

package cn.itcast.crawler.test;

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

import java.io.IOException;

public class HttpPostTest {
    public static void main(String[] args) {
        // 創(chuàng)建HttpClient對(duì)象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 創(chuàng)建HttpGet對(duì)象 設(shè)置url訪問(wèn)地址
        HttpPost httpPost = new HttpPost("http://www.itcast.cn");
        CloseableHttpResponse response = null;
        try {
            //使用HttpClient發(fā)起請(qǐng)求,獲取response
            response = httpClient.execute(httpPost);
            //解析響應(yīng)
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "utf8");
                System.out.println(content.length());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //關(guān)閉response
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

4.4.帶參數(shù)的POST請(qǐng)求

在傳智中搜索學(xué)習(xí)視頻,使用POST請(qǐng)求,url地址為:
http://yun.itheima.com/search
url地址沒(méi)有參數(shù),參數(shù)keys=java放到表單中進(jìn)行提交

package cn.itcast.crawler.test;

import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

public class HttpPostParamTest {
    public static void main(String[] args) throws Exception {
        // 創(chuàng)建HttpClient對(duì)象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 創(chuàng)建HttpGet對(duì)象 設(shè)置url訪問(wèn)地址
        HttpPost httpPost = new HttpPost("https://haokan.baidu.com");

        // 聲明List集合,封裝表單中的參數(shù)
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        // https://haokan.baidu.com/?sfrom=baidu-top
        boolean add = params.add(new BasicNameValuePair("sfrom", "baidu-top"));
        // 創(chuàng)建表單的Entity對(duì)象 第一個(gè)參數(shù)就是封裝好的表單參數(shù),第二個(gè)參數(shù)就是編碼
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params,"utf8");

        //設(shè)置表單的Entity對(duì)象到Post請(qǐng)求中
        httpPost.setEntity(formEntity);

        CloseableHttpResponse response = null;
        try {
            //使用HttpClient發(fā)起請(qǐng)求,獲取response
            response = httpClient.execute(httpPost);
            //解析響應(yīng)
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "utf8");
                System.out.println(content.length());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //關(guān)閉response
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

連接池

如果每次請(qǐng)求都要?jiǎng)?chuàng)建HttpClient,會(huì)有頻繁創(chuàng)建和銷毀的問(wèn)題,可以使用連接池來(lái)解決這個(gè)問(wèn)題。
測(cè)試以下代碼,并斷點(diǎn)查看每次獲取的HttpClient都是不一樣的。

package cn.itcast.crawler.test;

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.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

public class HttpClientPoolTest {
    public static void main(String[] args) {
        // 創(chuàng)建連接池管理器
        PoolingHttpClientConnectionManager cm =  new PoolingHttpClientConnectionManager();

        // 設(shè)置最大連接數(shù)
        cm.setMaxTotal(100);
        //設(shè)置每個(gè)主機(jī)的最大連接數(shù)
        cm.setDefaultMaxPerRoute(10);
        // 使用連接池管理器發(fā)起請(qǐng)求
        doGet(cm);
        doGet(cm);
    }

    private static void doGet(PoolingHttpClientConnectionManager cm) {
        //不是每次創(chuàng)建新的HttpClient 而是從連接池中獲取HttpClient
        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();

        HttpGet httpGet = new HttpGet("https://www.baidu.com");
        CloseableHttpResponse response = null;

        try {
            response = httpClient.execute(httpGet);

            if(response.getStatusLine().getStatusCode() == 200){
                String content = EntityUtils.toString(response.getEntity(), "utf8");

                System.out.println(content.length());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                // 不能關(guān)閉HttpClient 由連接池管理HttpClient
            }
        }
    }

    private static void doPost(PoolingHttpClientConnectionManager cm) {
    }
}

請(qǐng)求參數(shù)

有時(shí)候因?yàn)榫W(wǎng)絡(luò),或者目標(biāo)服務(wù)器的原因,請(qǐng)求需要更長(zhǎng)的時(shí)間才能完成,我們需要自定義相關(guān)時(shí)間文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-406737.html

package cn.itcast.crawler.test;

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;

import java.io.IOException;

public class HttpConfigTest {
    public static void main(String[] args) {
        // 創(chuàng)建HttpClient對(duì)象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 創(chuàng)建HttpGet對(duì)象 設(shè)置url訪問(wèn)地址
        HttpGet httpGet = new HttpGet("https://cn.bing.com");

        //配置請(qǐng)求信息
        RequestConfig config = RequestConfig.custom().setConnectTimeout(1000) // 創(chuàng)建連接的最長(zhǎng)時(shí)間,單位是毫秒
                .setConnectionRequestTimeout(500)  // 設(shè)置獲取連接的最長(zhǎng)時(shí)間 單位也是毫秒
                .setSocketTimeout(10*1000).build();  //設(shè)置數(shù)據(jù)傳輸?shù)淖铋L(zhǎng)時(shí)間,單位也是毫秒

        // 給請(qǐng)求設(shè)置請(qǐng)求信息
        httpGet.setConfig(config);

        CloseableHttpResponse response = null;
        try {
            //使用HttpClient發(fā)起請(qǐng)求,獲取response
            response = httpClient.execute(httpGet);
            //解析響應(yīng)
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "utf8");
                System.out.println(content.length());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //關(guān)閉response
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

到了這里,關(guān)于HttpClient-爬蟲(chóng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【網(wǎng)絡(luò)安全】學(xué)過(guò)編程就是黑客?

    【網(wǎng)絡(luò)安全】學(xué)過(guò)編程就是黑客?

    我們不可否認(rèn)的是黑客為我們帶來(lái)了巨大的財(cái)產(chǎn)損失于危機(jī),即使其最初的思想是正確的。 個(gè)人主頁(yè):【??許思王】 黑客,相信經(jīng)常接觸電腦的朋友們對(duì)這個(gè)詞都不陌生,各類影視視頻中黑客總是身處暗處,運(yùn)籌帷幄,正是這種神秘感讓我走向?qū)W習(xí)編程的道路,也正是如此

    2024年02月15日
    瀏覽(14)
  • 電腦明明有網(wǎng)絡(luò)可以上網(wǎng),但是瀏覽器網(wǎng)頁(yè)就是打不開(kāi)

    電腦明明有網(wǎng)絡(luò)可以上網(wǎng),但是瀏覽器網(wǎng)頁(yè)就是打不開(kāi)

    網(wǎng)上好多種辦法都試了都沒(méi)有用,tmd,最后發(fā)現(xiàn)直接把“使用代理服務(wù)器”關(guān)掉就行了。 浪費(fèi)了好多時(shí)間。

    2024年02月11日
    瀏覽(95)
  • 【Java萬(wàn)花筒】解碼Java網(wǎng)絡(luò)通訊謎團(tuán):對(duì)比Apache HttpClient、OkHttp、Feign、RestTemplate、Retrofit

    在當(dāng)今互聯(lián)網(wǎng)時(shí)代,Java開(kāi)發(fā)者常常需要處理與各種RESTful服務(wù)的通信。本文旨在深入比較Java中幾個(gè)主流的網(wǎng)絡(luò)請(qǐng)求庫(kù),包括Apache HttpClient、OkHttp、Feign、RestTemplate、Retrofit。通過(guò)全面的介紹和示例代碼,讀者將能夠了解它們的特點(diǎn)、優(yōu)勢(shì)以及如何在實(shí)際項(xiàng)目中使用。 歡迎訂閱專

    2024年01月25日
    瀏覽(25)
  • 利用貓框Qiyu_HttpClient類在VFP中生成微信小程序碼

    利用貓框Qiyu_HttpClient類在VFP中生成微信小程序碼

    最近用 VFP 在做 MES+ 微信小程序結(jié)合的項(xiàng)目,期中有一項(xiàng)需求是:掃描報(bào)工二維碼進(jìn)行生產(chǎn)報(bào)工,要求在 MES 中生成報(bào)工小程序二維碼碼,在小程序中和微信中掃描該二維碼都能跳轉(zhuǎn)小程序相關(guān)頁(yè)面。 進(jìn)入小程序中再掃碼跳轉(zhuǎn)到相關(guān)頁(yè)面的功能,在微信開(kāi)發(fā)者工具很快就實(shí)現(xiàn)

    2024年04月28日
    瀏覽(12)
  • 解放程序員,加速創(chuàng)新,缺少的就是一個(gè)工具而已

    解放程序員,加速創(chuàng)新,缺少的就是一個(gè)工具而已

    隨著科技的不斷進(jìn)步和應(yīng)用場(chǎng)景的不斷擴(kuò)大,軟件開(kāi)發(fā)已經(jīng)成為當(dāng)今世界的核心驅(qū)動(dòng)力之一。 然而,傳統(tǒng)的軟件開(kāi)發(fā)模式往往存在著繁瑣的編碼過(guò)程、復(fù)雜的架構(gòu)設(shè)計(jì)和漫長(zhǎng)的調(diào)試周期,使得程序員們難以專注于創(chuàng)新和高難度的研究。 很多程序員上班的時(shí)候會(huì)面臨這樣的一

    2024年02月15日
    瀏覽(23)
  • 微信小程序?qū)崿F(xiàn)布局頂端固定也就是不隨滾動(dòng)而滾動(dòng)

    微信小程序?qū)崿F(xiàn)布局頂端固定也就是不隨滾動(dòng)而滾動(dòng)

    ?博主介紹: 本人專注于Android/java/數(shù)據(jù)庫(kù)/微信小程序技術(shù)領(lǐng)域的開(kāi)發(fā),以及有好幾年的計(jì)算機(jī)畢業(yè)設(shè)計(jì)方面的實(shí)戰(zhàn)開(kāi)發(fā)經(jīng)驗(yàn)和技術(shù)積累;尤其是在安卓(Android)的app的開(kāi)發(fā)和微信小程序的開(kāi)發(fā),很是熟悉和了解;本人也是多年的Android開(kāi)發(fā)人員;希望我發(fā)布的此篇文件可以幫

    2024年02月05日
    瀏覽(31)
  • 讓你的微信小程序?qū)τ脩舾佑押茫荷侠虞d和下拉刷新就是關(guān)鍵

    讓你的微信小程序?qū)τ脩舾佑押茫荷侠虞d和下拉刷新就是關(guān)鍵

    上拉加載和下拉刷新是小程序開(kāi)發(fā)的常見(jiàn)需求。本文將介紹如何在微信小程序中實(shí)現(xiàn)上拉加載和下拉刷新的功能,為用戶帶來(lái)更加流暢、便捷的使用體驗(yàn)。 實(shí)現(xiàn)效果如下: 1. 首先需要在使用到的 json 文件下配置 \\\"enablePullDownRefresh\\\": true 2. 在 js 文件中加上觸底函數(shù)跟上拉函數(shù)

    2024年02月11日
    瀏覽(24)
  • 都說(shuō)程序員就是吃青春飯,35歲就會(huì)被淘汰,我用自己的經(jīng)歷來(lái)告訴你事實(shí)

    都說(shuō)程序員就是吃青春飯,35歲就會(huì)被淘汰,我用自己的經(jīng)歷來(lái)告訴你事實(shí)

    上個(gè)假期我回家了,遇到三姑六婆總會(huì)問(wèn)我讀研沒(méi)讀、工作怎么樣、薪資多少等等問(wèn)題,相信大家也都遇到過(guò)。我一般會(huì)用“在做程序員,寫(xiě)代碼的這種話”來(lái)敷衍他們,但沒(méi)想到他們懂得還挺多的,又搬出了一套關(guān)于程序員的理論,比如程序員35歲就要轉(zhuǎn)行,是個(gè)青春飯,

    2023年04月18日
    瀏覽(19)
  • 白盒測(cè)試(路徑測(cè)試就是設(shè)計(jì)足夠的測(cè)試用例,覆蓋程序中所有可能的路 徑、判定覆蓋、條件覆蓋)

    白盒測(cè)試(路徑測(cè)試就是設(shè)計(jì)足夠的測(cè)試用例,覆蓋程序中所有可能的路 徑、判定覆蓋、條件覆蓋)

    重點(diǎn):白盒測(cè)試(路徑覆蓋、判定覆蓋、條件覆蓋) ??????? 包含了分支覆蓋,但與謂詞覆蓋無(wú)關(guān)。要求走完所有的路徑。如下圖,設(shè)計(jì)測(cè)試用力時(shí),有四條路徑,需要走完這四條路徑。 軟件測(cè)試的目的: GlenMyers給出的軟件測(cè)試目的: 1.測(cè)試是一個(gè)為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)

    2023年04月09日
    瀏覽(20)
  • 【程序人生】納瓦爾:確保稀缺性的最簡(jiǎn)單的方法就是這個(gè)東西來(lái)自你的個(gè)性 | 納瓦爾寶典

    目錄 納瓦爾簡(jiǎn)介 每個(gè)人應(yīng)該找到自己獨(dú)一無(wú)二的專長(zhǎng) 確保稀缺性 產(chǎn)品化的關(guān)鍵點(diǎn)

    2024年02月08日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包