2011-09-30 76 views
1

我在另一个线程中提出了一个类似的问题,但我认为在这一点上我正好无法获得正确的语法。我基本上想要在Java中打开一个套接字,发送一个HTTP请求消息来获取特定网页的头部字段。我的程序看起来像这样到目前为止: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

变化

output.println("HEAD " + uri + " HTTP/1.1"); 

output.println("HEAD " + uri + " HTTP/1.1"); 
output.println("Host: " + server); 
output.println(); 

你有因为通常有一个IP地址的多个虚拟主机发送Host头。如果您使用HTTP/1.0,则它的工作不包含Host标题。

+0

这样做。谢谢! – Cuthbert

+1

+1用于固定它;) – Bozho

1

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

+0

这是我建议的,但我想看看这是否会实际工作。 – Cuthbert

+0

好吧,“它不工作”不是很具描述性;) – Bozho

+0

+1对于Apache http – palacsint