2010-02-06 102 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