HttpClient与HttpUrlConnection的使用问题

昨天分别用python和java对同一批网页进行内容抓取时发现的问题。以下是场景描述

  1. 页面较大,总共70kb.

  2. python 的requests库能较快(1s内)获得完整数据返回,30%几率在1-5s内完整返回。

  3. java的jsoup的get方法,httpClient和httpUrlConnection的对应get请求方法,首先返回一部分文本(约16K),然后卡住,约10s后完整打印page内容。

  4. 麻烦的问题来了,代码的执行顺序让我现在比较迷惑,先记录一下,以后找到原因再补充。代码简写如下


    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版本的包。
现在问题是当执行到 "***a"处时,pageContent并没有完全获取到page的源文件,只是部分,导致下面doc.select处的eles始终size为0,因此无法保存页面body的article部分内容。然而更诡异的是,a、b、三处的System.out.println()居然是顺序执行的,但是实际运行时是先输出a的一部分,程序显示执行完毕,然后程序运行到b到c之前的代码段,执行完毕后,大约卡顿5-10s,程序完整输出a的内容,然后输出b最后是c。

你可能感兴趣的:(HttpClient与HttpUrlConnection的使用问题)