C#学习教程:C#不会加载某种XML,但在浏览器中工作-使用C#和来自互联网的公共XML提要的项目。但是我在加载XML时遇到问题。这是我的代码:stringurl=...;...XmlDocumentxmlDoc=newXmlDocument();...尝试{xmlDoc.Load(url);}catch(Exceptione){Console.WriteLine(e);当我尝试加载XML时,它抛出异常:http://sofzh.miximages.com/c%23/Xo2Ra.png(新手无法附加图像,抱歉)当我的代码不起作用时,我不惊讶。我通过确定问题开始了标准的故障排除过程。我完全希望我的代码有问题。为了检验这个理论,我在网上找到了一个随机的XML提要并将其复制到我的代码中。令我惊讶的是,结果非常好。现在我的疑虑转移到了目标XML上。它适用于Chrome和FireFox(加载时间为0.734秒),不需要任何凭据(向公众开放),并且有效/格式正确。然后我想起了我几个月前写的一个使用相同提要的JavaScript。我启动它,发现它也能完美运行。我在这里不知所措,因为我的代码和XML似乎都很好。有谁知道如何解决这一问题?我是否需要使用HttpWebRequest并传递给XmlDocument(我不知道该怎么做)?还有什么办法可以解决这个问题吗?正如我在评论中指出的那样,与来自浏览器的完整请求相比,XmlDocument.Load非常原始。当您使用像Fiddler这样的代理或数据包跟踪器时,您会发现,例如IE9发出包含某些标头的请求:Gethttp://stats.us.playstation.com/warhawk/XmlFeedAction.action?start=1&end=1HTTP/1.1Accept:text/html,application/xhtml+xml,/Accept-语言:en-US用户代理:Mozilla/5.0(兼容;MSIE9.0;WindowsNT6.1;Trident/5.0)接受编码:gzip、deflate连接:Keep-Alive主机:stats.us.playstation.comCookie:JSESSIONID=HLygTblTG13HhXqqw80jw9Wdhw0q03dxcQLp04fD3Q5yChYvPGn6!-882698034;SONYCOOKIE1=543467712.20480.0000Web服务器的行为现在受请求中指定的标头的影响。在这种情况下,Accept和user-agent发挥作用。我可以通过在XmlDocument中包含一些假的header来成功加载xml内容,如下所示:很有用,需要多了解C#学习教程,希望大家多多关注——stringurl="http://stats.us.playstation.com/warhawk/XmlFeedAction.action?start=1&end=1";WebClient客户端=newWebClient();client.Headers["User-Agent"]="Mozilla/5.0(WindowsNT6.1)AppleWebKit/535.1(KHTML,likeGecko)Chrome/14.0.835.202Safari/535.1";client.Headers["Accept"]="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";字符串数据=client.DownloadString(url);XmlDocumentdoc=newXmlDocument();文档.LoadXml(数据);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
