有时我会遇到无法抓取并保存的图像。一个例子是:
https://s3.amazonaws.com/plumdistrict.com-production/perks/12321/image/original.?1325898487
当我从 Internet Explorer 中点击 URL 时,我看到了图像,但是当我尝试从下面的代码中获取它时,我收到以下错误消息“System.Net.WebException 远程服务器返回错误:(403) Forbidden”错误得到回应:
string url = "https://s3.amazonaws.com/plumdistrict.com-production/perks/12321/image/original.?1325898487";
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
关于如何获取此图像有什么想法吗?
编辑:
我能够保存具有扩展名的图像。例如,我可以很好地抓取以下图像:
https://s3.amazonaws.com/plumdistrict.com-product/perks/12659/image/original.jpg?1326828951
虽然 HTTP 最初应该是无状态的,但有很多实现依赖它的无状态。如果您提供了证明您已登录的 cookie,我可以将我的网络服务器配置为仅接受“http://mydomain.com/sexy_avatar.jpg”的请求。如果没有,我会向您发送重定向 303 到“http://mydomain” .com/avatar_for_public_use.jpg"。
亚马逊可能也会做同样的事情。尝试使用 Chrome 加载网页,并在开发者模式 (CTRL+SHIFT+J) 下查看网络视图,以查看提供给网站的所有标头。也许您甚至需要在同一会话中进行完整的导航,然后才能查看图像。在我开发的许多 Web 应用程序中肯定是这种情况:-)
嗯,看起来它是从脚本生成的(可能是从数据库检索的)。服务器应该发送一个文件/内容类型来配合......但它似乎不是,我认为这违反了标准。
我的 Linux 机器非常清楚,一旦它位于我的硬盘驱动器上,它就是一个 JPEG 图像,因为它检查文件头而不是依赖扩展名。也许有一个工具可以在 Windows 中执行相同的操作?
编辑:实际上,经过进一步思考,你会为此得到 403 似乎很奇怪。也许服务器实际上阻止您以这种方式检索文件。