代码之家  ›  专栏  ›  技术社区  ›  Lucas S.

android中的HttpURLConnection未发送正确的用户代理头

  •  6
  • Lucas S.  · 技术社区  · 15 年前

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

    当我连接浏览器时,我得到: 例如:用户代理:Mozilla/5.0(Linux;U安卓1.5;英-法;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添加的,但是由于某种原因,当我通过代码连接时,头没有添加到请求中。

    从浏览器: browser

    源代码: code

    谢谢

    2 回复  |  直到 5 年前
        1
  •  10
  •   Dan Hulme    11 年前

    这个 HTTP specification 声明所有客户端都应该发送用户代理头。但是,它并没有说明它们应该以服务器希望的方式标识客户机。因此,Android符合这个规范,你对此无能为力。

    你所能做的就是使用 setRequestProperty()

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

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

        2
  •  -2
  •   Jeffrey Blattman    15 年前

    如果HttpURLConnection伪造了浏览器的用户代理,那就错了。它毕竟不是浏览器。如果它能发送更多的信息就好了,比如“Java/1.6(macos10.5…”等等。