java - 从java中的URL读取: when is a request actually sent?

标签 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());
    }   
}

此外,作业要求:

Your program should not continuously send requests to wiki. Your program must wait for at least 1 second after every 10 requests

所以我的问题是,上面的代码中“请求”到底发送到哪里?这种连接是如何运作的?整个网页是一次性加载的吗?还是逐行下载?

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

最佳答案

 InputStream is = url.openStream();

在上面的行中,您将发送请求

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

在这一行获取输入流并读取。

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

关于java - 从java中的URL读取: when is a request actually sent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47344666/

相关文章:

java - 在java中使用一个方法内生成的本体到另一个方法

java - Ant:重命名同名的子目录

java - 如何替换字符串中两个子字符串中的文本?

javascript - 在 excel 中打开 Excel 文件 url(来自源,不是下载的副本)

java - 当 URL 包含 "]"时使用 URL.getPort() 提取端口号时出现问题

python - 在 Tornado 中调用 static_url

swift - 从 URL 获取 Facebook 个人资料图片

java - 在java中,当传递查询以从teradata获取字段的平均值时,小数点会丢失

java - 操作 VelocityView 来更改模板名称

asp.net - ASP 到 ASP.NET 的 URL 问题再次出现