在Java中的HTTP请求中添加HEADER

我正在使用以下代码发送简单的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

当你写作

 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"); 

不要尝试自己实现HTTP协议。

使用Apache的HttpComponents 。

(或者它的旧版本和更容易使用的版本 – HttpClient )

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

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

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

 void setRequestProperty(String key, String value) 

应该用于设置请求的参数(如HEADER字段)..请在此处查看以供参考

如果你必须自己手动完成它必须遵循这种格式,每个标题都在它自己的行上。

名称:价值

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

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