2013-04-21 37 views
3

我正在使用HtmlAgilityPack。 我正在从一个网站下载文章和图像。 80%的图像下载没有问题。但是有些图像会引发错误。我可以在image_failed事件中看到错误的名称。 我下载的图像那样:AG_E_NETWORK_ERROR在WindowsPhone中从网络下载一些图像

Image = new BitmapImage(new Uri(img.Attributes["src"].Value)); 

我已搜查谷歌,发现这确实是跆拳道的问题。

回答

3

引荐者标题很可能会让你感到困扰。您需要自己发出呼叫(而不是依靠BitmapImage下载文件)。

有一个方便的代码段/实用程序可以“扩展”xaml,使其更易于操作。

http://blogs.msdn.com/b/swick/archive/2011/08/04/wp7-mango-image-download-with-custom-referer-header.aspx

编辑:解释

很多网站阻止不从他们的网站来图片的请求。这样,如果您有http://mysite.com并且您链接到http://cnn.com中的图像,则它们可以阻止直接链接的图像并重定向它们或其他东西。

现在,它的工作原理是浏览器控制所有来自标记(或来自任何其他机制,如AJAX)的调用,并添加了REFERRER HTTP标头,说明请求来自哪里(http://mysite.com)那么cnn.com代码可以阻止它。

在.NET桌面,网址标头没有自动添加到请求 - 这意味着,呼叫会被一些网站,检查空引用,而不是对别人不被阻止。

切换到基于Silverlight的WP7/8。在Silverlight中,引用者是Silverlight控件所在的站点。所以,如果你有一个在http://mysite.com上运行的SL控件,并且它发出[任何] http请求,则引用标头将自动设置为http://mysite.com。没有办法控制afaik(出于安全原因)。但是,基于SL的Windows Phone不需要受到相同安全约束的约束。但是,当他们将代码“移植”到Windows Phone时,他们会将一些值添加到引用者中 - 值实际上是手机内的包位置(可以使用fiddler来查看)。这实际上是一些路径(/ apps/storage/[guid])或类似的东西 - 我不记得确切的价值。要解决这个问题,你需要在发出请求的HTTP头文件中设置引用链接。

希望能够说清楚。

+0

感谢它的工作。 – 2013-04-21 14:44:52

+0

但是你能解释一下代码吗?我无法理解它为什么起作用 – 2013-04-21 14:55:01

+0

添加了解释。希望有所帮助。 – 2013-04-22 08:27:15