在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字段)..请在此处查看以供参考
你也可以看到URLConnection。
http://java.sun.com/j2se/1.4.2/docs/api/java/net/URLConnection.html
如果你必须自己手动完成它必须遵循这种格式,每个标题都在它自己的行上。
名称:价值
查看HTTP规范中的标头格式。
http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Message-Headers