0

URL http://www.fourmilab.ch/cgi-bin/Earthは、地球のライブマップを示しています。

ブラウザ(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ベースのwgetの「落とし穴」はありますか?そのような概念はどこで(本またはオンラインリソース)説明されますか?

4

5 に答える 5

2

ページのソースコードを調べると、地球の画像を含むimgを含むリンクがあります。例えば:

<img
 src = "/ cgi-bin / Earth?di = 570C6ABB1F33F13E95631EFF088262D5E20F2A10190A5A599229"
 ismap = "ismap" usemap = "#zoommap" width = "320" height = "320" border = "0" alt = "" />

'di'パラメータを指定せずに、画像自体ではなく、この画像を参照してWebページ全体を要求しているだけです。

編集:「Di」パラメータは、とにかく、あなたが受け取りたい地球の「部分」をエンコードします、とにかく、例えば試してみてください

wget http://www.fourmilab.ch/cgi-bin/Earth?di=F5AEC312B69A58973CCAB756A12BCB7C47A9BE99E3DDC5F63DF746B66C122E4E4B28ADC1EFADCC43752B45ABE2585A62E6FB304ACB6354E2796D9D3

于 2009-09-03T11:09:34.360 に答える
1

POSTの代わりにGETを使用します。バックグラウンドのCGIプログラムでは完全に異なります。

于 2009-09-03T11:12:17.473 に答える
1

Ravadreに続いて、

wget -p http://www.fourmilab.ch/cgi-bin/Earth 

<img>タグを含むXHTMLファイルをダウンロードします。

XHTMLを編集して、imgタグ以外のすべてを削除し、それを別のwget -pコマンドを含むbashスクリプトに変換して、?をエスケープしました。および=

これを実行すると、earth.jpgに名前を変更した14kBファイルを取得しました

私のやり方では、実際にはプログラマティックではありませんが、それは可能だと思います。

しかし、@ somedeveloperが言ったように、diの値は変化しています(時間に依存するため)。

于 2009-09-03T11:38:50.683 に答える
0

ダウンロードしているのはHTMLページ全体であり、画像ではありません。--page-requisites画像やその他の要素もダウンロードするには、 (場合によっては--convert-links)パラメータを使用する必要があります。残念ながら、robots.txtはの下のURLへのアクセスを許可していないため/cgi-bin/、wgetはの下にある画像をダウンロードしません/cgi-bin/。AFAIKには、ロボットプロトコルを無効にするパラメータはありません。

于 2009-09-03T11:13:42.897 に答える
0

みんな、これが私がついにやったことです。私はより良い方法を望んでいたので、このソリューションに完全には満足していません...最初の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
于 2009-09-03T12:00:30.617 に答える