Chcę uzyskać dostęp do strony gazety, a następnie pobrać ich kopie w formie papierowej (w formacie PDF). Witryna wymaga ode mnie zalogowania się przy użyciu mojego adresu e-mail i hasła, a następnie pozwala mi uzyskać dostęp do tych adresów URL w formacie PDF.
Mam problem z „ustawieniem sesji” w Wget . Kiedy loguję się na stronie z mojej przeglądarki, ustawia dwie wartości plików cookie:
[email protected]
Password=12345
Próbowałem:
wget --post-data "[email protected]&Password=12345" http://epaper.abc.com/login.aspx
Jednak to właśnie pobrało stronę logowania i zapisało ją lokalnie.
FORMULARZ na stronie logowania ma dwa pola:
txtUserID
txtPassword
I takie przyciski radiowe:
<input id="rbtnManchester" type="radio" checked="checked" name="txtpub" value="44">
Kolejny przycisk:
<input id="rbtnLondon" type="radio" name="txtpub" value="64">
Jeśli opublikuję to na stronie login.aspx, otrzymam to samo wyjście
wget --post-data "[email protected]&txtPassword=12345&txtpub=44" http://epaper.abc.com/login.aspx
Jeśli zrobię:
--save-cookies abc_cookies.txt
wydaje się, że nie ma nic poza domyślną treścią.
Na koniec, jeśli ja też to zrobię --debug
, powie:
...
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.
Jednak abc_cookies.txt pokazuje TYLKO następujące:
# HTTP cookie file.
# Generated by Wget on 2011-08-16 08:03:05.
# Edit at your own risk.
(Nie jestem pewien, dlaczego nie otrzymuję żadnych odpowiedzi na temat przepełnienia stosu - być może super użytkownik jest lepszą witryną - używanie Wget do pobierania plików PDF z witryny wymagającej ustawienia plików cookie ).
EDYCJA 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.
Zawartość abc_cookies.txt
epaper.abc.com FALSE / FALSE 0 ASP.NET_SessionId owcrje55yl45kgmhn43gq145
Odpowiedzi:
Myślę, że musisz użyć,
--keep-session-cookies
aby zachować sesyjne pliki cookie, a nie tylko--save-cookies
(potrzebujesz obu).Zasadniczo ty
zaloguj się i uzyskaj plik cookie sesji.
następnie
aby pobrać plik PDF.
źródło
Może to pomoże. Witryna, na którą próbowałem się zalogować, zawierała ukryte pola, które musiałem uzyskać, aby móc się zalogować. Tak więc pierwszy wget pobiera stronę logowania w celu znalezienia dodatkowych pól, drugi loguje się na stronie i zapisuje pliki cookie, a trzeci używa tych plików cookie, aby uzyskać stronę, której szukasz.
Jest kilka przydatnych informacji na temat tego innego postu SO:
źródło