Uso de wget para descargar archivos PDF de un sitio que requiere que se establezcan cookies

8

Quiero acceder al sitio de un periódico y luego descargar sus copias en papel (en PDF). El sitio requiere que inicie sesión con mi dirección de correo electrónico y contraseña y luego me permite acceder a esas URL de PDF.

Tengo problemas para "configurar mi sesión" en Wget . Cuando inicio sesión en el sitio desde mi navegador, establece dos valores de cookies:

[email protected]
Password=12345

Lo intenté:

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

Sin embargo, eso solo descargó la página de inicio de sesión y la guardó localmente.

El FORMULARIO en la página de inicio de sesión tiene dos campos:

txtUserID
txtPassword

Y botones de radio como este:

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

Otro botón:

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

Si publico esto en la página login.aspx, obtengo el mismo resultado

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

Si lo hago:

--save-cookies abc_cookies.txt

no parece tener nada más que el contenido predeterminado.

Por último, si lo hago --debugtambién, 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.

Sin embargo, abc_cookies.txt muestra SOLO lo siguiente:

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

(No estoy seguro de por qué no recibo ninguna respuesta sobre Stack Overflow; quizás Super User es un sitio mejor). Uso de Wget para descargar archivos PDF desde un sitio que requiere la configuración de cookies .


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

Contenido de abc_cookies.txt

epaper.abc.com       FALSE   /       FALSE   0       ASP.NET_SessionId       owcrje55yl45kgmhn43gq145
siliconpi
fuente
Sospecho que no está recibiendo respuesta porque hay pocos expertos en el uso más avanzado de wget. :(
jcrawfordor
@Frank - intente usar --keep-session-cookies en el wget de inicio de sesión inicial, vea mi respuesta a continuación.
EightBitTony
¿Login.aspx es la URL de la página de inicio de sesión o la URL a la que se envía la página de inicio de sesión?
Edward Shtern el

Respuestas:

4

Creo que debe usar --keep-session-cookiespara preservar las cookies de sesión, en lugar de solo --save-cookies(necesita ambas).

Básicamente tú

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

para iniciar sesión y obtener su cookie de sesión.

entonces

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

para descargar el PDF.

OchoBitTony
fuente
:( no funcionó ... sin dados ...
siliconpi
@Frank - Entonces, ¿qué sucedió en cada etapa? ¿Obtuviste las cookies en el disco como se esperaba?
EightBitTony
Hola Tony, gracias por intentar ayudar. ¡Estoy confundido con todo esto!
siliconpi
Hola Tony, ¿tuviste la oportunidad de ver el Edit1 detallado?
siliconpi
Sí, nada salta. Mi única consulta es ¿qué hay en login.aspx cuando lo recuperas desde el primer wget? ¿Indica que has iniciado sesión correctamente?
EightBitTony
2

Tal vez esto ayude. El sitio en el que intentaba iniciar sesión tenía algunos campos ocultos que necesitaba obtener antes de poder iniciar sesión correctamente. Entonces, el primer wget obtiene la página de inicio de sesión para encontrar los campos adicionales, el segundo wget inicia sesión en el sitio y guarda las cookies, el tercero luego usa esas cookies para obtener la página que está buscando.

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

Hay información útil sobre esta otra publicación SO:

tpow
fuente
1
Intente despersonalizar su respuesta (elimine la "I"). Aparte de eso, para una de tus primeras respuestas, estás muy bien.
wizlog