2015-02-05 55 views
0

一个令我困惑的问题,可以真正解决一些问题。C# - WP8.1应用程序中的Web用户代理应用程序

我需要从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应用程序做的一样,我将如何检测(如果我需要摆在首位?)用户代理(和设置),并能够检索数据?

谢谢大家。

回答

1

Windows Phone 8.1应用程序将使用HttpClient。默认情况下不会有用户代理集。用于手机网页浏览器的默认用户代理是:

“Mozilla/5.0(Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520 )像iPhone OS 7_0_3 Mac OS X AppleWebKit/537(KHTML,如Gecko)Mobile Safari/537“

您可以在HttpRequestMessage.Headers.UserAgent属性上手动设置user-agent。

参考文献:

HttpClient的

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

的User-Agent

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

+0

嗯...用户代理在大多数情况下的默认值是否工作? – crazyGamer 2015-02-06 04:27:33

+0

是的,除非http服务需要其他内容,否则请检查该服务的文档。 – 2015-02-06 08:25:03

+0

好的,谢谢:)它工作。 – crazyGamer 2015-02-06 15:56:38

0

为使用HTTP类库不添加任何用户A男性默认。从msdn页面查看这些行:

默认情况下,HttpClient对象不会将HTTP请求发送到Web服务的用户代理标头。某些HTTP服务器(包括某些Microsoft Web服务器)需要将用户代理标头包含在客户端发送的HTTP请求中。 HTTP服务器使用用户代理头来确定如何格式化某些HTTP页面,以便在客户端为不同的Web浏览器和窗体因素(例如手机)呈现更好的效果。如果客户机请求中没有用户代理标头,则某些HTTP服务器会返回错误。我们需要添加一个用户代理头,以避免使用Windows.Web.Http.Headers命名空间中的类出现这些错误。我们将此头添加到HttpClient.DefaultRequestHeaders属性。

有关详细信息,请参考以下链接:为确切的用户代理字符串

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

也看看下面的答案(由布雷Bentzinger)。