我在另一个线程中问了一个类似的问题,但我想我只是在这一点上遇到了语法问题。我基本上想在Java中打开一个套接字,发送一个HTTP请求消息来获取特定网页的标头字段。到目前为止,我的程序看起来是这样的:
String server = "www.w3.org";
int port = 80;
String uri = "/Protocols/rfc2616/rfc2616-sec5.html#sec5.1"
Socket socket = new Socket(server, port);
PrintStream output = new PrintStream(socket.getOutputStream());
BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));
output.println("HEAD " + uri + " HTTP/1.1");
//String response = "";
String line = "";
while((line = socketInput.readLine()) != null){
System.out.println(line);
}
socketInput.close();
socket.close();
它真的不起作用。或者它并不适用于所有网站。如果有人能告诉我目前所做的事情存在的直接问题,那就太好了。谢谢你!
变化
output.println("HEAD " + uri + " HTTP/1.1");
output.println("HEAD " + uri + " HTTP/1.1");
output.println("Host: " + server);
output.println();
您必须发送Host
报头,因为通常在一个IP地址上有多个虚拟主机。如果你使用HTTP/1.0
,它的工作没有Host
头。
我会使用一些更高级的组件,如HttpURLConnection
(见这里)或apache http组件。