2011-09-30 73 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