0

我正在尝试使用“XMLTextReader”从RSS 提要中提取数据。尽管它在 Web 浏览器中加载得非常好,但是当我使用我的代码时,我收到 400 错误(“远程服务器返回错误:(400)错误请求。”):

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

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

任何人都可以告诉我为什么它可以在浏览器中工作但不适用于我的代码吗?

PS - 它适用于类似格式的数据

4

2 回答 2

1

任何人都可以告诉我为什么它可以在浏览器中工作但不适用于我的代码吗?

也许远程网站希望您设置 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 的更多信息。

哦,顺便说一句,您将SyndicationFeed类内置到 .NET 框架中正是为此目的。使用 anXmlReader来解析 RSS 似乎相当费力。

于 2013-02-18T15:15:37.207 回答
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())
{
    //
}
于 2013-02-18T15:22:10.673 回答