WP7以编程方式形成UserAgent

时间:2011-07-28 13:09:48

标签: windows-phone-7 httpwebrequest user-agent

我必须从我的应用程序将User-agent发送到服务器。

“Mozilla / 4.0(兼容; MSIE 7.0; Windows Phone OS 7.0; Trident / 3.1; IEMobile / 7.0; HTC; HD7 T9292)” 以上是一个示例用户代理。我不知道。为了形成用户代理,我们可以通过编程方式获得所有值。

3 个答案:

答案 0 :(得分:2)

对于记录,设备名称不是User-Agent的必要部分。

Mango的全局User-Agent字符串如下所示:

Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)

答案 1 :(得分:0)

看起来像是HD7上IE7 mobile的用户代理。我假设您没有编写IEMobile,因此您的应用程序将具有不同的用户代理名称/标识符。如果您是从应用程序发出Web请求,那么您的应用程序是内置浏览器的不同用户代理。

SDK没有公开获取样本中构成用户代理的所有单个元素的方法。

如果您真的想从应用程序中获取浏览器的用户代理,那么您可能做的最好的事情就是包含一个WebBrowser控件,然后通过Javascript navigator.userAgent提取它但我不知道知道它是否得到支持。如果支持,您可以使用windows.external.notify将其传回给您的代码。

答案 2 :(得分:0)

我做了这个帮助器,它将创建一个临时的WebBrowser,加载一个脚本并返回一个等待的userAgent:

internal static class UserAgentHelper
{
    private const string Html = @"<!DOCTYPE html><html><body onload=""window.external.notify(navigator.userAgent);""></body></html>";
    public static Task<string> GetUserAgent()
    {
        var tcs = new TaskCompletionSource<string>();
        var browser = new WebBrowser { IsScriptEnabled = true };
        browser.ScriptNotify += (sender, args) => tcs.SetResult(args.Value);
        browser.NavigateToString(Html);
        return tcs.Task;
    }
}

用法:

var userAgent = await UserAgentHelper.GetUserAgent();

它至少适用于WP7.1和WP8.0:

WP7: "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Microsoft; XDeviceEmulator)";
WP8: "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; Microsoft; Virtual)";
相关问题