2010-02-06 52 views
2

我使用這下面的代碼來發送簡單的HTTP請求:在HTTP請求添加標題在Java中

try 
{ 
    Socket s = new Socket(); 
    s.bind (new InetSocketAddress (ipFrom, 0)); 
    s.connect (new InetSocketAddress (ipTo, 80), 1000); 

    PrintWriter  writer = new PrintWriter (s.getOutputStream()); 
    BufferedReader reader = new BufferedReader (new InputStreamReader (s.getInputStream())); 

    writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 
    writer.flush(); 

    s  .close(); 
    reader.close(); 
    writer.close(); 
} 

然而,正如你所看到的,我不發送自定義頁眉。 我應該添加什麼來發送自定義HEADER?

乾杯,

克里斯托夫奧利維爾

回答

5

當你寫

writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 

\r\n\r\n位發送換行/回車結束線,然後又一個,表明有沒有更多的頭部。這是HTTP和電子郵件格式的標準,即空白行表示標題結尾。爲了添加額外的標題,您只需要在完成之前不要發送該序列。你可以做以下代替

writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
writer.print ("header1: value1\r\n"); 
writer.print ("header2: value2\r\n"); 
writer.print ("header3: value3\r\n"); 
// end the header section 
writer.print ("\r\n"); 
+0

非常感謝,這正是我正在尋找的。 – bill0ute 2010-02-06 19:14:44

6

不要試圖自己實現HTTP協議。

使用HttpComponents由Apache。

(或其老年人和一個小更容易使用的版本 - HttpClient

+0

嗨。感謝您的建議。它似乎非常簡單而強大! – bill0ute 2010-02-06 19:17:21

1

即使我建議嘗試HttpComponents如提及Bozho代替自己實現HTTP,這將是添加自定義標題的方式:

writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
writer.print ("X-MyOwnHeader: SomeValue\r\n"); 
+0

具體來說,標題部分的末尾用「\ r \ n \ r \ n」表示,所以無論最後一個標題行應該以什麼結尾,或者應該跟着另一行說'writer.print(「\ r \ n \ r \ r \ n「);' – Jherico 2010-02-06 19:07:29

+0

幾乎是正確的,您只需要另一個'writer.print(」\ r \ n「);'在最後完成標題部分。 – x4u 2010-02-06 19:08:52

+0

你是對的。 :-) – Malax 2010-02-07 13:33:12

1

你應該使用類已經制備的用於HTTP連接,像HTTPUrlConnection那就是UrlConnection一個childreon並且具有這種方法

void setRequestProperty(String key, String value) 

,應該用於設置請求的參數(如HEADER字段)..檢查here以供參考

1
+0

嗨,我不能真正使用URLConnection,因爲我需要綁定到本地IP。我的服務器有5 ips,我需要從這發送我的請求。 – bill0ute 2010-02-06 19:10:15

+1

@billOute - 什麼? URLConnection完全有能力處理這個問題。你只需要在URL中使用不同的IP地址! – 2010-02-07 01:59:52