0

有时我会遇到无法抓取的图像,以便将其保存。这方面的一个例子是:

https://s3.amazonaws.com/plumdistrict.com-production/perks/12321/image/original.?1325898487

当我从 Internet Explorer 中点击 url 时,我看到了图像,但是当我尝试从下面的代码中获取它时,我收到以下错误消息“System.Net.WebException The remote server returned an error: (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

4

2 回答 2

1

虽然 HTTP 最初应该是无状态的,但有很多实现依赖于它是无状态的。我可以将我的网络服务器配置为仅接受对“http://mydomain.com/sexy_avatar.jpg”的请求,前提是您提供了一个 cookie 来证明您已登录。如果没有,我会向您发送重定向 303 到“http://mydomain” .com/avatar_for_public_use.jpg”。

亚马逊可能也在做同样的事情。尝试使用 Chrome 加载网页,并在开发人员模式 (CTRL+SHIFT+J) 下查看网络视图以查看提供给网站的所有标题。也许您甚至需要在同一会话中进行完整的导航,然后才能看到图像。在我开发的许多 Web 应用程序中肯定是这种情况 :-)

于 2012-01-18T09:34:16.503 回答
0

好吧,它看起来像是从脚本生成的(可能是从数据库中检索的)。服务器应该发送一个文件/内容类型来配合......但它似乎不是,我认为这违反了标准。

我的 Linux 机器非常清楚,一旦它在我的硬盘驱动器上,它就是一个 JPEG 图像,因为它检查文件头而不是依赖于扩展名。也许有一个工具可以在 Windows 中做同样的事情?

编辑:实际上,经过进一步考虑,您会为此获得403似乎很奇怪。也许服务器实际上阻止您以这种方式检索文件。

于 2012-01-18T09:21:20.000 回答