Post 如何以编程方式获取此页面上的图像?

Post 如何以编程方式获取此页面上的图像?,post,cgi,wget,Post,Cgi,Wget,该URL显示了一张实时的地球地图 如果我在我的浏览器(FF)中发布此URL,图像会显示得很好。但是当我尝试“wget”获取相同的页面时,我失败了 以下是我首先尝试的: wget -p http://www.fourmilab.ch/cgi-bin/Earth 考虑到可能所有其他表单字段也是必需的,我在上面的页面上做了一个“查看源代码”,记下了各种字段值,然后发布了以下URL: wget --post-data "opt=-p&lat=7°27'&lon=50°49'&n

该URL显示了一张实时的地球地图

如果我在我的浏览器(FF)中发布此URL,图像会显示得很好。但是当我尝试“wget”获取相同的页面时,我失败了

以下是我首先尝试的:

wget -p http://www.fourmilab.ch/cgi-bin/Earth
考虑到可能所有其他表单字段也是必需的,我在上面的页面上做了一个“查看源代码”,记下了各种字段值,然后发布了以下URL:

wget --post-data "opt=-p&lat=7°27'&lon=50°49'&ns=North&ew=East&alt=150889769&img=learth.evif&date=1&imgsize=320&daynight=-d" http://www.fourmilab.ch/cgi-bin/Earth
还是没有图像


谁能告诉我这里发生了什么。。。?CGI和/或基于表单POST的wgets是否存在任何“陷阱”?在哪里(书籍或在线资源)可以解释这些概念?

如果你查看页面的源代码,里面有一个与img的链接,其中包含地球的图像。例如:

<img src="/cgi-bin/Earth?di=570C6ABB1F33F13E95631EFF088262D5E20F2A10190A5A599229" ismap="ismap" usemap="#zoommap" width="320" height="320" border="0" alt="" /> 没有给出'di'参数,您只需要整个网页,包括对该图像的引用,而不是图像本身

编辑:'Di'参数编码您想要接收的地球的哪一部分,无论如何,请尝试例如 wget http://www.fourmilab.ch/cgi-bin/Earth?di=F5AEC312B69A58973CCAB756A12BCB7C47A9BE99E3DDC5F63DF746B66C122E4E4B28ADC1EFADCC43752B45ABE2585A62E6FB304ACB6354E2796D9D3CEF7A1044FA32907855BA5C8F wget

如果您要查看该页面的源代码,其中有一个与img的链接,其中包含地球图像。例如:

<img src="/cgi-bin/Earth?di=570C6ABB1F33F13E95631EFF088262D5E20F2A10190A5A599229" ismap="ismap" usemap="#zoommap" width="320" height="320" border="0" alt="" /> 没有给出'di'参数,您只需要整个网页,包括对该图像的引用,而不是图像本身

编辑:'Di'参数编码您想要接收的地球的哪一部分,无论如何,请尝试例如 wget http://www.fourmilab.ch/cgi-bin/Earth?di=F5AEC312B69A58973CCAB756A12BCB7C47A9BE99E3DDC5F63DF746B66C122E4E4B28ADC1EFADCC43752B45ABE2585A62E6FB304ACB6354E2796D9D3CEF7A1044FA32907855BA5C8F wget
使用GET而不是POST。对于后台的CGI程序,它们完全不同。

使用GET而不是POST。它们与后台的CGI程序完全不同。

您下载的是整个HTML页面,而不是图像。要下载图像和其他元素,您需要使用
--page requisites
(可能还有
--convert links
)参数。不幸的是,由于robots.txt不允许访问
/cgi-bin/
下的URL,wget将不会下载位于
/cgi-bin/
下的图像。AFAIK没有参数来禁用robots协议。

您下载的是整个HTML页面,而不是图像。要下载图像和其他元素,您需要使用
--page requisites
(可能还有
--convert links
)参数。不幸的是,由于robots.txt不允许访问
/cgi-bin/
下的URL,wget将不会下载位于
/cgi-bin/
下的图像。抱歉,没有参数来禁用robots协议。

从Ravadre开始

wget -p http://www.fourmilab.ch/cgi-bin/Earth 
下载包含标记的XHTML文件

我编辑了XHTML以删除除img标记以外的所有内容,并将其转换为包含另一个wget-p命令的bash脚本,以转义?及=

当我执行此操作时,我得到了一个14kB的文件,我将其重命名为earth.jpg

不是很有计划性,我这样做的,但我认为这是可以做到的


但正如@somedeveloper所说,di值正在变化(因为它取决于时间)。

继Ravadre之后

wget -p http://www.fourmilab.ch/cgi-bin/Earth 
下载包含标记的XHTML文件

我编辑了XHTML以删除除img标记以外的所有内容,并将其转换为包含另一个wget-p命令的bash脚本,以转义?及=

当我执行此操作时,我得到了一个14kB的文件,我将其重命名为earth.jpg

不是很有计划性,我这样做的,但我认为这是可以做到的


但正如@somedeveloper所说,di值正在改变(因为它取决于时间)。

伙计们,我终于做到了。不完全满意这个解决方案,因为我曾经(现在)希望有一个更好的方法。。。在第一个wget本身上获取图像的一个。。。给我与通过firefox浏览时相同的用户体验

#!/bin/bash

tmpf=/tmp/delme.jpeg
base=http://www.fourmilab.ch
liveurl=$(wget -O - $base/cgi-bin/Earth?opt=-p 2>/dev/null | perl -0777 -nle 'if(m@<img \s+ src \s* = \s* "(/cgi-bin/Earth\?di= .*? )" @gsix) { print "$1\n" }' )
wget -O $tmpf $base/$liveurl &>/dev/null
#/bin/bash
tmpf=/tmp/delme.jpeg
基地=http://www.fourmilab.ch
liveurl=$(wget-O-$base/cgi-bin/Earth?opt=-p2>/dev/null | perl-0777-nle'if(m@/dev/null

伙计们,我终于做到了。我对这个解决方案不太满意,因为我曾经(现在仍然)希望有一个更好的方法……在第一个wget上获得图像……给我与通过firefox浏览时相同的用户体验

#!/bin/bash

tmpf=/tmp/delme.jpeg
base=http://www.fourmilab.ch
liveurl=$(wget -O - $base/cgi-bin/Earth?opt=-p 2>/dev/null | perl -0777 -nle 'if(m@<img \s+ src \s* = \s* "(/cgi-bin/Earth\?di= .*? )" @gsix) { print "$1\n" }' )
wget -O $tmpf $base/$liveurl &>/dev/null
!/bin/bash
tmpf=/tmp/delme.jpeg
基地=http://www.fourmilab.ch
liveurl=$(wget-O-$base/cgi-bin/Earth?opt=-p2>/dev/null | perl-0777-nle'if(m@/dev/null

在我看来,图像的来源与您提到的不一样。每次从浏览器刷新页面时,图像源/url都会发生变化。所有这一切似乎都分两步完成:动态生成一个新图像和图像路径,然后将此图像发送到客户端。我不知道如何处理此问题!它在我看来,图像的来源与您提到的不同。每次从浏览器刷新页面时,图像源/url都会发生变化。所有这一切似乎都分两步完成:动态生成新图像和图像路径,然后将此图像发送到客户端。我不知道如何处理此问题!是的,我看到了这也是。但是,正如我在对Brad回复的评论中所说的,这个di值几乎在每次页面刷新时都会发生变化。所以,问题是:我如何才能在wget之前找到图像URL?然后你会得到一个长名称为“Earth\?di\=F5AEC…”的文件,这是一个jpeg。非常聪明!@somedeveloper:di只有在你改变极坐标时才会发生变化h你想得到图像。如果你想得到一些特定的坐标,你应该分析第一页的结果,你实际上做了下面的两个答案。@pavium:文件名可以更改,大多数程序可以将数据流到标准输出,从那以后-它可以重定向到任何文件或设备,所以这不是问题。是的,我也看到了。但是,正如我在对Brad回复的评论中所说的,这个di值几乎在每次页面刷新时都会发生变化。所以,问题是:在我可以wget它之前,我如何找到图像URL?你会得到一个长名称为“Earth\?di\=F5AEC…”的文件,这是一个jpeg。非常聪明!@somedev