2013-02-18 60 views
0

我试图使用'XMLTextReader'从RSS feed中提取数据。虽然它加载在Web浏览器完全正常,我得到一个400错误(“远程服务器返回错误:(400)错误的请求”)当我用我的代码:无法加载在浏览器中正常加载的C#rss feed(400错误)

XmlTextReader reader = new XmlTextReader(url); 
while (reader.Read()) 
{ //Do something } 

我也试过'WebClient'无济于事。

任何人都可以启发我为什么它在浏览器中工作,但不是与我的代码请吗?

P.S - 它正常工作与数据类似的格式一样this

+0

你得到了什么确切的错误? – 2013-02-18 14:56:26

+0

远程服务器返回错误:(400)错误的请求。 – user1567095 2013-02-18 15:14:02

回答

1

Can anybody enlighten me as to why it works in a browser but not with my code please?

也许远程网站希望您设置的UserAgent。例如:

using (var client = new WebClient()) 
{ 
    client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"; 
    using (var stream = client.OpenRead(url)) 
    using (var reader = XmlReader.Create(stream)) 
    { 
     while (reader.Read()) 
     { 
      // ... 
     } 
    } 
} 

或者网站可能要求您进行身份验证才能调用此资源?在这种情况下,您需要随请求一起发送身份验证Cookie。如果您不确定,请联系网站管理员以获取有关如何使用API​​的更多信息。

哦,顺便说一下,您为.NET框架内置的SyndicationFeed类完全是为了这个目的。使用XmlReader解析RSS似乎相当费力。

+0

谢谢你的帮助!原来是UserAgent的一部分。这是一项急需的工作,当我有时间学习时,它将升级为SyndicationFeed。 – user1567095 2013-02-18 15:46:05

0

可能用WebClient下载它,并以这种方式将它提供给XmlTextReader?

var url = "http://marketplaceedgeservice.windowsphone.com/v8/catalog/apps/4aef0ee8-2378-e011-986b-78e7d1fa76f8?os=8.0.9903.0&cc=GB&oc=&lang=en-GB&hw=520170499&dm=RM-821_eu_euro1_111&oemId=NOKIA&moId=vod-gb&cf=99-1"; 
var data = ""; 

using (var wc = new WebClient()) 
{ 
    wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows; Windows NT 5.1; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4"); 
    data = wc.DownloadString(url);     
} 

var reader = new XmlTextReader(new System.IO.StringReader(data)); 
while (reader.Read()) 
{ 
    // 
} 
+1

谢谢你的帮助! – user1567095 2013-02-18 15:44:57