Verwenden von wget zum Herunterladen von PDF-Dateien von einer Site, für die Cookies gesetzt werden müssen

8

Ich möchte auf eine Zeitungsseite zugreifen und dann deren Epaper-Kopien (als PDF) herunterladen. Auf der Website muss ich mich mit meiner E-Mail-Adresse und meinem Passwort anmelden und dann auf diese PDF-URLs zugreifen.

Ich habe Probleme beim Einstellen meiner Sitzung in Wget . Wenn ich mich über meinen Browser bei der Site anmelde, werden zwei Cookie-Werte festgelegt:

[email protected]
Password=12345

Ich habe es versucht:

wget --post-data "[email protected]&Password=12345" http://epaper.abc.com/login.aspx

Dadurch wurde jedoch nur die Anmeldeseite heruntergeladen und lokal gespeichert.

Das FORMULAR auf der Anmeldeseite enthält zwei Felder:

txtUserID
txtPassword

Und Radiobuttons wie diese:

<input id="rbtnManchester" type="radio" checked="checked" name="txtpub" value="44">

Ein weiterer Knopf:

<input id="rbtnLondon" type="radio" name="txtpub" value="64">

Wenn ich dies auf der Seite login.aspx poste, erhalte ich die gleiche Ausgabe

wget --post-data "[email protected]&txtPassword=12345&txtpub=44" http://epaper.abc.com/login.aspx

Wenn ich mache:

--save-cookies abc_cookies.txt

Es scheint nichts anderes als den Standardinhalt zu haben.

Zum letzten, wenn ich es auch tue --debug, heißt es:

...
Set-Cookie: ASP.NET_SessionId=05kphcn4hjmblq45qgnjoe41; path=/; HttpOnly
...
Stored cookie epaper.abc.com -1 (ANY) / <session> <insecure> [expiry none] ASP.NET_SessionId 05kphcn4hjmblq45qgnjoe41
Length: 107253 (105K) [text/html]
Saving to: `login.aspx'
...
Saving cookies to abc_cookies.txt.

Abc_cookies.txt zeigt jedoch NUR Folgendes:

# HTTP cookie file.
# Generated by Wget on 2011-08-16 08:03:05.
# Edit at your own risk.

(Ich bin nicht sicher, warum ich keine Antworten auf Stack Overflow erhalte. Vielleicht ist Super User eine bessere Site. Verwenden von Wget zum Herunterladen von PDF-Dateien von einer Site, für die Cookies gesetzt werden müssen .)


BEARBEITEN 1

C:\Temp>wget --cookies=on --keep-session-cookies --save-cookies abc_cookies.txt --post-data "txtUserID=abc%40gmail.com&txtPassword=password&txtpub=44&chkbox=checkbox&submit.x=48&submit.y=7" http://epaper.abc.com/login.aspx --debug
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\Program Files (x86)\GnuWin32/etc/wgetrc
DEBUG output created by Wget 1.11.4 on Windows-MinGW.

--2011-08-18 08:15:59--  http://epaper.abc.com/login.aspx
Resolving epaper.abc.com... seconds 0.00, 999.999.99.99
Caching epaper.abc.com => 999.999.99.99
Connecting to epaper.abc.com|999.999.99.99|:80... seconds 0.00, connected.
Created socket 300.
Releasing 0x00a2ae80 (new refcount 1).

---request begin---
POST /login.aspx HTTP/1.0
User-Agent: Wget/1.11.4
Accept: */*
Host: epaper.abc.com
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 100

---request end---
[POST data: txtUserID=abc%40gmail.com&txtPassword=password&txtpub=44&chkbox=checkbox&submit.x=48&submit.y=7]
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 200 OK
Connection: keep-alive
Date: Thu, 18 Aug 2011 02:46:17 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=owcrje55yl45kgmhn43gq145; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 107253

---response end---
200 OK
Registered socket 300 for persistent reuse.

Stored cookie epaper.abc.com -1 (ANY) / <session> <insecure> [expiry none] ASP.NET_SessionId owcrje55yl45kgmhn43gq145
Length: 107253 (105K) [text/html]
Saving to: `login.aspx.1'

100%[======================================================================================================================>] 107,253     24.9K/s   in 4.2s

2011-08-18 08:16:05 (24.9 KB/s) - `login.aspx.1' saved [107253/107253]

Saving cookies to abc_cookies.txt.
Done saving cookies.

C:\Temp>wget --referer=http://epaper.abc.com/login.aspx --cookies=on --load-cookies abc_cookies.txt --keep-session-cookies --save-cookies abc_cookies.txt http://epaper.abc.com/PagePrint/16_08_2011_001.pdf --debug
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\Program Files (x86)\GnuWin32/etc/wgetrc
DEBUG output created by Wget 1.11.4 on Windows-MinGW.


Stored cookie epaper.abc.com -1 (ANY) / <session> <insecure> [expiry none] ASP.NET_SessionId owcrje55yl45kgmhn43gq145
--2011-08-18 08:16:12--  http://epaper.abc.com/PagePrint/16_08_2011_001.pdf
Resolving epaper.abc.com... seconds 0.00, 999.999.99.99
Caching epaper.abc.com => 999.999.99.99
Connecting to epaper.abc.com|999.999.99.99|:80... seconds 0.00, connected.
Created socket 300.
Releasing 0x00598290 (new refcount 1).

---request begin---
GET /PagePrint/16_08_2011_001.pdf HTTP/1.0
Referer: http://epaper.abc.com/login.aspx
User-Agent: Wget/1.11.4
Accept: */*
Host: epaper.abc.com
Connection: Keep-Alive
Cookie: ASP.NET_SessionId=owcrje55yl45kgmhn43gq145

---request end---
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 200 OK
Connection: keep-alive
Date: Thu, 18 Aug 2011 02:46:30 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
content-disposition: attachement; filename=Default_logo.gif
Cache-Control: private
Content-Type: image/GIF
Content-Length: 4568

---response end---
200 OK
Registered socket 300 for persistent reuse.
Length: 4568 (4.5K) [image/GIF]
Saving to: `16_08_2011_001.pdf'

100%[======================================================================================================================>] 4,568       7.74K/s   in 0.6s

2011-08-18 08:16:14 (7.74 KB/s) - `16_08_2011_001.pdf' saved [4568/4568]

Saving cookies to abc_cookies.txt.
Done saving cookies.

Inhalt von abc_cookies.txt

epaper.abc.com       FALSE   /       FALSE   0       ASP.NET_SessionId       owcrje55yl45kgmhn43gq145
siliconpi
quelle
Ich vermute, Sie erhalten keine Antwort, da es nur wenige Experten für die erweiterte Verwendung von wget gibt. :(
jcrawfordor
@Frank - versuche --keep-session-cookies im ersten Login-Wget zu verwenden, siehe meine Antwort unten.
EightBitTony
Ist login.aspx die URL der Anmeldeseite oder die URL, an die sich die Anmeldeseite sendet?
Edward Shtern

Antworten:

4

Ich denke, Sie müssen verwenden --keep-session-cookies, um Sitzungscookies zu erhalten, und nicht nur --save-cookies(Sie benötigen beide).

Grundsätzlich du

wget --keep-session-cookies --save-cookies ..... url

um sich anzumelden und Ihr Sitzungscookie zu erhalten.

dann

wget --load-cookie ...... url

um das PDF herunterzuladen.

EightBitTony
quelle
:( hat nicht funktioniert ... keine Würfel ...
Siliconpi
@Frank - Was also in jeder Phase passiert ist, haben Sie die Cookies wie erwartet auf der Festplatte erhalten, wenn Sie Header einfügen, welche Antworten Sie erhalten usw. Können Sie die Frage mit dem aktualisieren, was Sie jetzt versucht haben und was zurückgegeben wurde?
EightBitTony
Hallo Tony - danke, dass du versucht hast zu helfen - ich bin verwirrt über diese ganze Sache!
Siliconpi
Hallo Tony, hast du die Gelegenheit bekommen, dir das detaillierte Edit1 anzusehen?
Siliconpi
Ja, nichts springt heraus. Meine einzige Frage ist, was in login.aspx ist, wenn Sie es vom ersten wget zurückbekommen? Zeigt dies an, dass Sie erfolgreich angemeldet wurden?
EightBitTony
2

Vielleicht hilft das. Die Site, auf der ich mich anmelden wollte, enthielt einige versteckte Felder, die ich abrufen musste, bevor ich mich erfolgreich anmelden konnte. Das erste Wget ruft die Anmeldeseite auf, um die zusätzlichen Felder zu finden, das zweite Wget meldet sich bei der Site an und speichert die Cookies. Das dritte Wget verwendet diese Cookies, um die gewünschte Seite zu erhalten.

#!/bin/bash

# get the login page to get the hidden field data
wget -a log.txt -O loginpage.html http://foobar/default.aspx
hiddendata=`cat loginpage.html | grep value | grep foobarhidden | tr '=' ' ' | awk '{print $9}' | sed s/\"//g`
rm loginpage.html

# login into the page and save the cookies
postData=user=fakeuser'&'pw=password'&'foobarhidden=${hiddendata}
wget -a log.txt -O /dev/null --post-data ${postData} --keep-session-cookies --save-cookies cookies.txt http://foobar/default.aspx

# get the page you're after
wget -a log.txt -O results.html --load-cookies cookies.txt http://foobar/lister.aspx?id=42
rm cookies.txt

Es gibt einige nützliche Informationen zu diesem anderen SO-Beitrag:

tpow
quelle
1
Bitte versuchen Sie, Ihre Antwort zu de-personalisieren (entfernen Sie das "Ich"). Abgesehen davon, für eine Ihrer ersten Antworten, geht es Ihnen gut.
Wizlog