在Java中向HTTP请求添加头信息

3

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

然而,正如您所看到的,我没有发送自定义头信息。 我应该添加什么来发送自定义头信息?

6个回答

6

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

使用Apache的HttpComponents

(或者它更早版本且易于使用的HttpClient)


嗨,谢谢你的建议。它看起来非常简单而且强大! - bill0ute

5
当您编写代码时,
writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 
< p > \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"); 

1

你应该使用已经准备好用于http连接的类,比如HTTPUrlConnectionUrlConnection的子类,并且有这个方法。

void setRequestProperty(String key, String value)

应该用于设置请求参数(如HEADER字段)...请参阅此处以获取参考资料


如果你的目的是学习计算机科学的低层抽象,那么这并不适用。 - Brad Ellis

1

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

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

具体来说,头部部分的结尾由"\r\n\r\n"表示,因此无论最后一行头部是什么,都应该以它结束,或者紧随其后再加上另一行,内容为writer.print("\r\n"); - Jherico
差不多了,你只需要在末尾再加上一个 writer.print("\r\n"); 就可以完成头部分了。 - x4u

1

嗨,我不能真正使用URLConnection,因为我需要绑定到本地IP。我的服务器有5个IP地址,我需要从其中一个发送我的请求。 - bill0ute
1
@billOute - 什么?一个URLConnection完全可以应对这个。你只需要在URL中使用不同的IP地址就行了!! - Stephen C

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接