C# - WP8.1应用程序中的Web用户代理

时间:2015-02-05 17:36:39

标签: c# http-headers windows-phone-8.1

一个让我感到困惑的问题,并且可以通过某种洞察力做到这一点。

我需要从http服务中检索Json对象。当我在控制台窗口中测试它时,我一直收到一个"内部服务器错误:500"直到我为WebClient对象设置UserAgent属性。 例如:

WebClient client = new WebClient();
client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36");
content = client.DownloadString(url);

现在,如果我需要为WP8.1应用程序执行相同操作,我将如何检测(如果我需要首先?)UserAgent(并设置它)并能够检索数据?< / p>

谢谢大家。

2 个答案:

答案 0 :(得分:1)

Windows Phone 8.1 App将使用HttpClient。默认情况下,不会设置用户代理。电话Web浏览器的默认用户代理是:

&#34; Mozilla / 5.0(移动; Windows Phone 8.1; Android 4.0; ARM; Trident / 7.0; Touch; rv:11.0; IEMobile / 11.0;诺基亚; Lumia 520),如iPhone OS 7_0_3 Mac OS X AppleWebKit / 537(KHTML,与Gecko一样)Mobile Safari / 537&#34;

您可以在HttpRequestMessage.Headers.UserAgent属性上手动设置用户代理。

参考文献:

<强> HttpClient的

https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.web.http.headers.httprequestheadercollection.aspx

用户代理

https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx#ie11 \

答案 1 :(得分:0)

默认情况下,使用http的类库不会添加任何用户代理。请参阅msdn页面中的以下几行:

  

默认情况下,HttpClient对象不会向Web服务发送带有HTTP请求的用户代理标头。某些HTTP服务器(包括某些Microsoft Web服务器)要求在客户端发送的HTTP请求中包含用户代理标头。 HTTP服务器使用user-agent标头来确定如何格式化某些HTTP页面,以便它们在客户端上针对不同的Web浏览器和形状因子(例如移动电话)更好地呈现。如果客户端请求中没有用户代理标头,则某些HTTP服务器会返回错误。我们需要使用Windows.Web.Http.Headers命名空间中的类来添加用户代理标头以避免这些错误。我们将此标头添加到HttpClient.DefaultRequestHeaders属性。

有关详细信息,请参阅以下链接:

How to connect to an HTTP server using Windows.Web.Http.HttpClient (XAML)

另请参阅下面的答案(由Bret Bentzinger撰写),了解确切的用户代理字符串。