我的学校作业涉及编写一个抓取维基百科的简单网页抓取工具。作业规定我不能使用任何外部库,所以我一直在玩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;被送?这个连接如何运作?整个网页是一次性加载的吗?还是逐行下载?
老实说,如果我误解了一些基本的东西,我真的不太了解网络,所以道歉。任何帮助将不胜感激。
答案 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中的字节,以便将数据有效负载检索到您的程序中。