【发布时间】:2011-07-28 13:09:47
【问题描述】:
我必须从我的应用程序将用户代理发送到服务器。
“Mozilla/4.0(兼容;MSIE 7.0;Windows Phone OS 7.0;Trident/3.1;IEMobile/7.0;HTC;HD7 T9292)” 以上是一个示例用户代理。我不知道。为了形成用户代理,我们可以通过编程获得哪些值。
【问题讨论】:
标签: windows-phone-7 httpwebrequest user-agent
我必须从我的应用程序将用户代理发送到服务器。
“Mozilla/4.0(兼容;MSIE 7.0;Windows Phone OS 7.0;Trident/3.1;IEMobile/7.0;HTC;HD7 T9292)” 以上是一个示例用户代理。我不知道。为了形成用户代理,我们可以通过编程获得哪些值。
【问题讨论】:
标签: windows-phone-7 httpwebrequest user-agent
为了记录,设备名称不是用户代理的必要部分。
Mango 的全局 User-Agent 字符串如下所示:
Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)
【讨论】:
这看起来像是在 HD7 上的 IE7 mobile 的用户代理。我假设您没有编写 IEMobile,因此您的应用程序将具有不同的用户代理名称/标识符。如果您从您的应用发出网络请求,那么您的应用与内置浏览器是不同的用户代理。
SDK 没有公开获取构成示例中用户代理的所有单个元素的方法。
如果您真的想从您的应用程序中获取浏览器的用户代理,您可能会做的最好的事情是包含一个 WebBrowser 控件,然后通过 Javascript 使用 navigator.userAgent 提取它,但我不知道如果支持。如果支持,您可以使用 windows.external.notify 将其传递回您的代码。
【讨论】:
我创建了这个帮助程序,它将创建一个临时 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)";
【讨论】: