从java中读取URL:何时是实际发送的请求?

时间:2017-11-17 06:37:03

标签: java url

我的学校作业涉及编写一个抓取维基百科的简单网页抓取工具。作业规定我不能使用任何外部库,所以我一直在玩java.net.URL类。基于official tutorial以及我教授给出的一些代码,我有:

public static void main(String[] args) {
    System.setProperty("sun.net.client.defaultConnectTimeout", "500");
    System.setProperty("sun.net.client.defaultReadTimeout",    "1000");

    try {
        URL url = new URL(BASE_URL + "/wiki/Physics");
        InputStream is = url.openStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        String inputLine;
        int lineNum = 0;
        while ((inputLine = br.readLine()) != null && lineNum < 10) {
            System.out.println(inputLine);
            lineNum++;
        }   
        is.close();
    }
    catch (MalformedURLException e) {
        System.out.println(e.getMessage());
    }
    catch (IOException e) {
        System.out.println(e.getMessage());
    }   
}

此外,作业要求:

  

您的程序不应该不断向wiki发送请求。你的计划   每10次请求后必须等待至少1秒

所以我的问题是,上面代码中的确切位置是&#34;请求&#34;被送?这个连接如何运作?整个网页是一次性加载的吗?还是逐行下载?

老实说,如果我误解了一些基本的东西,我真的不太了解网络,所以道歉。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

 InputStream is = url.openStream();

在上面一行您将发送请求

BufferedReader br = new BufferedReader(new InputStreamReader(is));

在此行获取输入流并阅读。

调用url.openStream()会启动与URL解析到的服务器的新TCP连接。然后通过连接发送HTTP GET请求。如果一切正常(即200 OK),则服务器发回HTTP响应消息,该消息携带在指定URL处提供的数据有效载荷。然后,您需要读取openStream()方法返回的InputStream中的字节,以便将数据有效负载检索到您的程序中。