Utilizzo di wget per scaricare file PDF da un sito che richiede l'impostazione di cookie


8

Voglio accedere a un sito di giornale e quindi scaricare le loro copie epaper (in PDF). Il sito mi richiede di accedere utilizzando il mio indirizzo e-mail e la mia password e quindi mi consente di accedere a quegli URL PDF.

Ho problemi a "impostare la mia sessione" in Wget . Quando accedo al sito dal mio browser, imposta due valori di cookie:

UserID=abc@gmail.com
Password=12345

Provai:

wget --post-data "UserID=abc@gmail.com&Password=12345" http://epaper.abc.com/login.aspx

Tuttavia, quello ha appena scaricato la pagina di accesso e salvata localmente.

Il FORM nella pagina di accesso ha due campi:

txtUserID
txtPassword

E i pulsanti radio come questo:

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

Un altro pulsante:

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

Se inserisco questo nella pagina login.aspx, ottengo lo stesso output

wget --post-data "txtUserID=abc@gmail.com&txtPassword=12345&txtpub=44" http://epaper.abc.com/login.aspx

Se lo faccio:

--save-cookies abc_cookies.txt

non sembra avere altro che il contenuto predefinito.

Per ultimo, se lo faccio anche io --debug, dice:

...
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.

Tuttavia, abc_cookies.txt mostra SOLO quanto segue:

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

(Non sono sicuro del motivo per cui non ricevo risposte su StackTranslate.it - ​​forse Super User è un sito migliore - Usare Wget per scaricare file PDF da un sito che richiede l'impostazione di cookie .)


MODIFICA 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.

Contenuto di abc_cookies.txt

epaper.abc.com       FALSE   /       FALSE   0       ASP.NET_SessionId       owcrje55yl45kgmhn43gq145

Ho il sospetto che non ricevi alcuna risposta perché ci sono pochi esperti sull'utilizzo più avanzato di wget. :(
jcrawfordor,

@Frank - prova a utilizzare --keep-session-cookies nella wget di accesso iniziale, vedi la mia risposta di seguito.
EightBitTony,

Login.aspx è l'URL della pagina di accesso o l'URL a cui invia la pagina di accesso?
Edward Shtern,

Risposte:


4

Penso che devi utilizzare --keep-session-cookiesper conservare i cookie di sessione, piuttosto che solo --save-cookies(hai bisogno di entrambi).

Fondamentalmente tu

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

per accedere e ottenere il cookie di sessione.

poi

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

per scaricare il PDF.


:( non ha funzionato ... no dice ...
siliconpi il

@Frank - Quindi, cosa è successo in ogni fase, hai ricevuto i cookie sul disco come previsto, se includi le intestazioni quali risposte stai ricevendo, ecc. Puoi aggiornare la domanda con cosa hai provato ora e cosa è stato restituito.
EightBitTony,

Ciao Tony - grazie per aver tentato di dare una mano - Sono perplesso per tutto questo!
siliconpi,

Ciao Tony, hai avuto la possibilità di dare un'occhiata al Edit1 dettagliato?
siliconpi,

Sì, niente salta fuori. La mia unica domanda è cosa c'è in login.aspx quando lo riavvii dalla prima wget? Indica che hai effettuato l'accesso correttamente?
EightBitTony,

2

Forse questo aiuterà. Il sito in cui stavo tentando di accedere aveva alcuni campi nascosti che dovevo ottenere prima di poter accedere con successo. Quindi la prima wget ottiene la pagina di accesso per trovare i campi extra, la seconda wget accede al sito e salva i cookie, la terza quindi utilizza quei cookie per ottenere la pagina che stai cercando.

#!/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

Ci sono alcune informazioni utili su questo altro post SO:


1
Prova a personalizzare la tua risposta (rimuovi la "I"). A parte questo, per una delle tue prime risposte, stai andando alla grande.
wizlog,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.