在URLConnection中设置标头的正确方法是什么?

我的代码如下:

URLConnection cnx = address.openConnection(); cnx.setAllowUserInteraction(false); cnx.setDoOutput(true); cnx.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); InputStream is = cnx.getInputStream(); 

如果我在获得InputStream之前设置标题是否可以? 我的标题会被发送,还是服务器会看到默认的URLConnection的用户代理(如果有的话)?

必须在使InputStream产生任何影响之前设置标头 – 如果连接已经打开,将抛出IllegalStateException

至于User-Agent标头,如果已经设置,则应该发送它。

请参阅URLConnection JavaDoc。

要回答这个问题,代码是正确的。 getInputStream()时,HTTP get被发送到目标服务器。

关于用户代理的附注,如果你没有设置它,URLConnection将发送默认的一个,这是:

 User-Agent: Java/1.6.0_24 (varies depending on your java version) 

我建议不要使用URLConnection等低级构造。 有很多用于发送HTTP请求的库,其中最突出的是Apache HTTP Client。