一个让我感到困惑的问题,并且可以通过某种洞察力做到这一点。
我需要从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>
谢谢大家。
答案 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/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撰写),了解确切的用户代理字符串。