HttpClient與HttpUrlConnection的使用問(wèn)題

昨天分別用python和java對(duì)同一批網(wǎng)頁(yè)進(jìn)行內(nèi)容抓取時(shí)發(fā)現(xiàn)的問(wèn)題。以下是場(chǎng)景描述

  1. 頁(yè)面較大,總共70kb.

  2. python 的requests庫(kù)能較快(1s內(nèi))獲得完整數(shù)據(jù)返回,30%幾率在1-5s內(nèi)完整返回。

  3. java的jsoup的get方法,httpClient和httpUrlConnection的對(duì)應(yīng)get請(qǐng)求方法,首先返回一部分文本(約16K),然后卡住,約10s后完整打印page內(nèi)容。

  4. 麻煩的問(wèn)題來(lái)了,代碼的執(zhí)行順序讓我現(xiàn)在比較迷惑,先記錄一下,以后找到原因再補(bǔ)充。代碼簡(jiǎn)寫(xiě)如下


    public static void main( String[] args ) throws IOException
    {
        String uri = "http://tech.sina.com.cn/i/2018-03-19/doc-ifyskynn9416417.shtml";
        HttpClient client = HttpClients.createDefault();
        URL url = new URL(uri.trim());
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setReadTimeout(6000);
        urlConnection.connect();
        BufferedReader input = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
        String line;
        StringBuilder pageContent = new StringBuilder();
        while ((line = input.readLine()) != null) {
            pageContent.append(line);
            pageContent.append("\n");
        }
    
        input.close();
        System.out.println(pageContent.toString());   
        System.out.println("end of the program");
    
        Document doc = Jsoup.parse(pageContent.toString(), "utf-8");
        Elements eles = doc.select(".atricle");
        for (Element element : eles) {
            String text = element.text();
            System.out.println(text);
        }
        System.out.println("end of cycle");
    }


其中用到了jsoup1.11.2版本和httpclient4.5.5版本的包。
現(xiàn)在問(wèn)題是當(dāng)執(zhí)行到 "***a"處時(shí),pageContent并沒(méi)有完全獲取到page的源文件,只是部分,導(dǎo)致下面doc.select處的eles始終size為0,因此無(wú)法保存頁(yè)面body的article部分內(nèi)容。然而更詭異的是,a、b、三處的System.out.println()居然是順序執(zhí)行的,但是實(shí)際運(yùn)行時(shí)是先輸出a的一部分,程序顯示執(zhí)行完畢,然后程序運(yùn)行到b到c之前的代碼段,執(zhí)行完畢后,大約卡頓5-10s,程序完整輸出a的內(nèi)容,然后輸出b最后是c。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容