在Java中的HTTP请求中添加HEADER

时间:2010-02-06 18:57:43

标签: java sockets httprequest

我正在使用以下代码发送简单的HTTP请求:

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。 我应该添加什么来发送自定义HEADER?

干杯,

Christophe OLIVIER

6 个答案:

答案 0 :(得分:6)

请勿尝试自行实施HTTP协议。

使用Apache的HttpComponents

(或更老,更易于使用的版本 - HttpClient

答案 1 :(得分: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"); 

答案 2 :(得分:1)

即使我建议尝试Bozho提到的HttpComponents而不是自己实现HTTP,这也是添加自定义标头的方法:

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

答案 3 :(得分:1)

您应该使用已经准备好用于http连接的类,例如HTTPUrlConnection UrlConnection的子项,并使用此方法

void setRequestProperty(String key, String value)

应该用于设置请求的参数(例如 HEADER 字段)..检查here以供参考

答案 4 :(得分:1)

答案 5 :(得分:0)

如果您必须自己手动完成,则必须遵循此格式,每个标题都在其自己的行上。

  

name:value

查看HTTP规范中的标题格式。

http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Message-Headers