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