我正在使用以下代码发送简单的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
答案 0 :(得分:6)
答案 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)
您还可以看到URLConnection。
http://java.sun.com/j2se/1.4.2/docs/api/java/net/URLConnection.html
答案 5 :(得分:0)
如果您必须自己手动完成,则必须遵循此格式,每个标题都在其自己的行上。
name:value
查看HTTP规范中的标题格式。
http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Message-Headers