我正在使用HtmlAgilityPack。 我正在从一个网站下载文章和图像。 80%的图像下载没有问题。但有些图像投掷错误。我可以在image_failed事件中看到错误名称。 我正在下载这样的图像:
Image = new BitmapImage(new Uri(img.Attributes["src"].Value));
我搜索了谷歌,发现这确实是WTF问题。
答案 0 :(得分:3)
引用者标题很可能会让你失望。您需要自己发出调用(而不是依赖BitmapImage来下载文件)。
有一个方便的代码段/实用程序可以“扩展”xaml并使其更容易完成。
编辑:说明
许多网站都阻止了不是来自网站的图片请求。这样,如果您有http://mysite.com并且链接到http://cnn.com中的图片,他们就可以阻止直接链接的图片并将其重定向或其他内容。
现在,它的工作原理是浏览器控制从标签(或任何其他机制,如AJAX)发出的所有调用,并添加REFERRER HTTP标头,说明请求的来源(http://mysite.com ) - 然后cnn.com代码可以阻止它。
在.NET桌面中,Referrer标头不会自动添加到请求中 - 这意味着某个检查空引荐来源的网站会阻止该通话,而不会检查其他未通知的网站。
切换到基于Silverlight的WP7 / 8。在Silverlight中,引用者是托管Silverlight控件的站点。因此,如果您在http://mysite.com上运行SL控件并发出[任意] http请求,则会自动为您设置引荐来源标头http://mysite.com。由于安全原因,没有办法控制那个afaik。但是,Windows Phone虽然基于SL,但不需要受相同安全约束的约束。然而,当他们将代码“移植”到Windows Phone时,他们将一些值放入referrer中 - 值实际上是手机内的包位置(你可以通过使用fiddler看到这一点)。它实际上是一些路径(/ apps / storage / [guid])或类似的东西 - 我不记得确切的价值。要解决此问题,您可以将引用者设置为发出请求的HTTP标头上的站点。
希望能说清楚。