Java 如何修改HttpUrlConnection的标头

Java 如何修改HttpUrlConnection的标头,java,http,http-headers,httpurlconnection,Java,Http,Http Headers,Httpurlconnection,我试图稍微改进一下Java Html文档,但是我遇到了httpurlconning的问题。一件事是,如果用户代理是JavaVM,则某些服务器会阻止请求。另一个问题是HttpUrlConnection没有设置referer或Location标题字段。由于有几个站点使用这些字段来验证内容是否是从他们自己的站点访问的,所以我在这里也被阻止了。据我所知,唯一的解决方案是替换HTTP协议的URL处理程序。或者是否有任何方法可以修改默认的HTTP处理程序?使用URL.openConnection打开URL。

我试图稍微改进一下Java Html文档,但是我遇到了
httpurlconning
的问题。一件事是,如果用户代理是JavaVM,则某些服务器会阻止请求。另一个问题是
HttpUrlConnection
没有设置
referer
Location
标题字段。由于有几个站点使用这些字段来验证内容是否是从他们自己的站点访问的,所以我在这里也被阻止了。据我所知,唯一的解决方案是替换HTTP协议的URL处理程序。或者是否有任何方法可以修改默认的HTTP处理程序?

使用
URL.openConnection
打开
URL
。可以选择强制转换为
HttpURLConnection
。调用
URLConnection.setRequestProperty
/
addRequestProperty


默认的用户代理头值是从
“http.Agent”
系统属性设置的。插件和WebStart允许您设置此属性。

如果您使用它来管理编程HTTP连接,您将获得一个非常有用的API,它可以创建连接(以及在失败时自动重新连接),设置标题、POST vs get、检索返回内容的简便方法等等

我解决了我的问题。我们只需将头发送到application/json,并将主体作为json对象传递。这就解决了问题。

请确保在适当的地方区分addRequestProperty和setRequestProperty。set变量用相同的键覆盖任何现有的头。添加变量添加标题的附加实例(如果已经存在)。添加请求属性是否添加新行(换句话说,请求将有两行具有相同键)还是在现有行中添加逗号和新值?@leoger谢谢您的帮助=D@leoger实际上,即使密钥已经存在,addRequestProperty也会添加密钥,因此,如果调用addRequestProperty(“用户代理”,“A”),然后调用addRequestProperty(“用户代理”,“B”),则标头将同时包含“用户代理:A”和“用户代理:B”. 拉兹的回答是正确的。最好的方法是使用Wireshark自己捕获数据包,并查看标头的状态。我尝试过,但有时不起作用。。我使用了ApacheHttpClient。我知道这篇文章很古老,但如果有人读到它:HttpURLConnection现在比HttpClient更受欢迎,有关信息,请参阅。