我在另一个线程中问了一个类似的问题,但我认为此时我在正确获取语法方面遇到了麻烦。我基本上想在 Java 中打开一个套接字,发送一个 HTTP 请求消息以获取特定网页的 header 字段。到目前为止,我的程序看起来像这样:
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
header ,因为一个IP 地址通常有多个虚拟主机。如果您使用 HTTP/1.0
,它可以在没有 Host
header 的情况下工作。
关于Java构造http请求报文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7615323/