我发现了一个问题.我有一个服务器,它使用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
谢谢,
在HTTP规范规定,所有客户都应该发送的User-Agent头.但是,它没有声明他们应该以服务器希望的方式识别客户端.Android因此符合规范,你可以做很多事情.
您可以做的最好的事情是使用setRequestProperty()方法尝试在请求中获得更好的用户代理值.不能保证它会起作用,但很可能.需要以下列方式调用该方法:
connection.setRequestProperty("User-Agent","MyAppName/1.0");
股票Android浏览器使用WebKit.如果要设置WebKit的用户代理字符串,则必须使用静态值,或者从WebKit读取用户代理字符串.我没有尝试过这个,但WebKit用户代理字符串在Android中可以通过WebSettings类的getUserAgentString()方法获得.