كيف يمكنني الحصول على الصورة برمجيًا على هذه الصفحة؟
سؤال
عنوان URL http://www.fourmilab.ch/cgi-bin/earth يظهر خريطة حية للأرض.
إذا قمت بإصدار عنوان URL هذا في متصفحي (FF) ، فإن الصورة تظهر على ما يرام. لكن عندما أحاول "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 و/أو 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
نصائح أخرى
استخدام الحصول على بدلا من النشر. إنها مختلفة تمامًا عن برنامج CGI في الخلفية.
يتبع من Ravadre ،
wget -p http://www.fourmilab.ch/cgi-bin/Earth
يقوم بتنزيل ملف XHTML الذي يحتوي علىu003Cimg> بطاقة شعار.
لقد قمت بتحرير XHTML لإزالة كل شيء ما عدا علامة IMG وحوّلتها إلى برنامج نصي bash يحتوي على أمر wget -p آخر ، يهرب من؟ و =
عندما نفذت هذا ، حصلت على ملف 14 كيلو بايت أطلق عليه اسم 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
ما تقوم بتنزيله هو صفحة HTML بأكملها وليس الصورة. لتنزيل الصورة والعناصر الأخرى أيضًا ، ستحتاج إلى استخدام --page-requisites
(ومحتمل --convert-links
) المعلمات). للأسف بسبب robots.txt لا يسمح بالوصول إلى عناوين URL /cgi-bin/
, ، لن يقوم WGT بتنزيل الصورة الموجودة تحت /cgi-bin/
. AFAIK لا توجد معلمة لتعطيل بروتوكول الروبوتات.