Java构造http请求消息

时间:2011-09-30 19:45:53

标签: java http sockets

我在另一个帖子中问了一个类似的问题,但我觉得我在这一点上遇到了正确的语法问题。我基本上想在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();

它并没有真正起作用。或者它并不适用于所有网站。如果有人能告诉我我所做的事情的直接问题,那就太好了。谢谢!

2 个答案:

答案 0 :(得分:2)

更改

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标题。

答案 1 :(得分:1)

我会使用一些更高级别的组件,例如HttpURLConnectionsee here)或apache http components