当前位置:  开发笔记 > 编程语言 > 正文

android中的HttpURLConnection不会发送正确的User-Agent标头

如何解决《android中的HttpURLConnection不会发送正确的User-Agent标头》经验,为你挑选了1个好方法。

我发现了一个问题.我有一个服务器,它使用User Agent标头来标识连接到它的设备.但是当我使用HttpURLConnection连接到服务器时,我没有得到User Agent标头,但是当我连接浏览器时,它会发送正确的用户代理.

为了进行测试,我正在使用一个回复服务器来回复它在请求中找到的标头.

当我连接浏览器时,我得到:例如:用户代理:Mozilla/5.0(Linux; U; Android 1.5; en-fr; HTC Hero Build/CUPCAKE)AppleWebKit/528.5 +(KHTML,类似Gecko)版本/ 3.1.2 Mobile Safari/525.20.1 Up.Link/6.3.1.20.06.3.1.20.0.

但是,当我通过代码连接UrlConnection时,我得到:

用户代理:无法使用.

有谁知道我们得到不同的行为?我如何以与浏览器相同的方式连接?

编辑:

我真正需要的不仅是User-Agent标头,我还需要一些特殊的标头(实际上是x-up-subno).此标头由运营商的APN添加,但出于某种原因,当我通过代码连接时,标头未添加到请求中.

来自浏览器: 浏览器http://bannergame.googlecode.com/files/device_browser.png

来自代码: code http://bannergame.googlecode.com/files/device_code.png

谢谢,



1> Vineet Reyno..:

在HTTP规范规定,所有客户都应该发送的User-Agent头.但是,它没有声明他们应该以服务器希望的方式识别客户端.Android因此符合规范,你可以做很多事情.

您可以做的最好的事情是使用setRequestProperty()方法尝试在请求中获得更好的用户代理值.不能保证它会起作用,但很可能.需要以下列方式调用该方法:

connection.setRequestProperty("User-Agent","MyAppName/1.0");

股票Android浏览器使用WebKit.如果要设置WebKit的用户代理字符串,则必须使用静态值,或者从WebKit读取用户代理字符串.我没有尝试过这个,但WebKit用户代理字符串在Android中可以通过WebSettings类的getUserAgentString()方法获得.


@answer:HTTP规范使用"should"而不是"must".这表明它会很好,但你不是"应该"的.@Lucas S:当你不是浏览器时,为什么要将自己标识为浏览器?
推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有