如何修改 HttpUrlConnection 的标头
Posted
技术标签:
【中文标题】如何修改 HttpUrlConnection 的标头【英文标题】:How to modify the header of a HttpUrlConnection 【发布时间】:2010-10-03 13:39:48 【问题描述】:我正在尝试稍微改进 Java html 文档,但我遇到了HttpUrlConntion
的问题。一件事是,如果用户代理是 Java VM,某些服务器会阻止请求。另一个问题是HttpUrlConnection
没有设置Referrer
或Location
头字段。由于几个站点使用这些字段来验证内容是从他们自己的站点访问的,因此我也被阻止在这里。据我所知,唯一的解决方案是替换 HTTP 协议的 URL 处理程序。或者有什么办法可以修改默认的HTTP Handler?
【问题讨论】:
【参考方案1】:用URL.openConnection
打开URL
。可选择转换为HttpURLConnection
。致电URLConnection.setRequestProperty
/addRequestProperty
。
默认的 User-Agent 标头值是从 "http.agent"
系统属性设置的。 PlugIn 和 WebStart 允许您设置此属性。
【讨论】:
一定要在适当的地方区分 addRequestProperty 和 setRequestProperty。 set 变体用相同的键覆盖任何现有的标头。如果已经存在,则添加变体会添加标题的附加实例。addRequestProperty
是否添加了新行(换句话说,请求将有 2 行带有 identical 键的行)还是将逗号和新值附加到现有线路?
@leoger 感谢您的帮助 =D
@leoger 实际上 addRequestProperty 会添加密钥,即使密钥已经存在,所以如果你调用 addRequestProperty("User-Agent", "A") 然后调用 addRequestProperty("User-Agent", " B"),标题将包括“User-Agent:A”和“User-Agent:B”。 laz 的答案是正确的。最好的办法是自己用Wireshark抓包,看看包头是怎样的。
我试过了,但有时它不起作用..我使用了 Apache HttpClient。它就像一个魅力。【参考方案2】:
如果您使用Apache HttpClient 来管理您的编程 HTTP 连接,您将获得一个非常有用的 API,它可以创建连接(以及在失败时可选的自动重新连接)、设置标题、发布与获取、检索返回内容的便捷方法还有更多。
【讨论】:
我知道这篇文章很旧,但如果有人读到它:HttpURLConnection 现在比 HttpClient 更受欢迎,请参阅this blog post 了解信息。【参考方案3】:我解决了我的问题。我们可以将标头发送到 application/json 并将正文作为 json 对象传递。这样就解决了问题。
【讨论】:
以上是关于如何修改 HttpUrlConnection 的标头的主要内容,如果未能解决你的问题,请参考以下文章
如何从 HttpURLConnection 实例获取 HTTP 请求字符串
如何使用 HttpURLConnection 在请求正文中发送数据?
如何从 HttpURLConnection 读取 json 数据