Utilisation de wget pour télécharger des fichiers PDF à partir d'un site nécessitant la configuration de cookies

8

Je souhaite accéder à un site de journal, puis télécharger leurs copies électroniques (en PDF). Le site nécessite que je me connecte en utilisant mon adresse e-mail et mon mot de passe, puis il me permet d'accéder à ces URL PDF.

J'ai du mal à "configurer ma session" dans Wget . Lorsque je me connecte au site depuis mon navigateur, il définit deux valeurs de cookies:

[email protected]
Password=12345

J'ai essayé:

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

Cependant, cela vient de télécharger la page de connexion et de l'enregistrer localement.

Le FORMULAIRE sur la page de connexion comporte deux champs:

txtUserID
txtPassword

Et des boutons radio comme celui-ci:

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

Un autre bouton:

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

Si je poste cela sur la page login.aspx, j'obtiens la même sortie

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

Si je fais:

--save-cookies abc_cookies.txt

il ne semble pas avoir autre chose que le contenu par défaut.

Pour le dernier, si je le fais --debugaussi, ça dit:

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

Cependant, abc_cookies.txt affiche UNIQUEMENT les éléments suivants:

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

(Je ne sais pas pourquoi je n'obtiens aucune réponse sur Stack Overflow - peut-être que Super User est un meilleur site - Utiliser Wget pour télécharger des fichiers PDF à partir d'un site qui nécessite la configuration de cookies .)


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

Contenu de abc_cookies.txt

epaper.abc.com       FALSE   /       FALSE   0       ASP.NET_SessionId       owcrje55yl45kgmhn43gq145
siliconpi
la source
Je soupçonne que vous n'obtenez aucune réponse car il y a peu d'experts sur l'utilisation plus avancée de wget. :(
jcrawfordor
@Frank - essayez d'utiliser --keep-session-cookies dans le wget de connexion initial, voir ma réponse ci-dessous.
EightBitTony
Login.aspx est-il l'URL de la page de connexion ou l'URL à laquelle la page de connexion est soumise?
Edward Shtern

Réponses:

4

Je pense que vous devez utiliser --keep-session-cookiespour conserver les cookies de session, plutôt que simplement --save-cookies(vous avez besoin des deux).

Fondamentalement, vous

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

pour vous connecter et obtenir votre cookie de session.

puis

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

pour télécharger le PDF.

EightBitTony
la source
:( n'a pas fonctionné ... pas de dés ...
siliconpi
@Frank - Donc, ce qui s'est passé à chaque étape, avez-vous obtenu les cookies sur le disque comme prévu, si vous incluez des en-têtes quelles réponses obtenez-vous, etc. Pouvez-vous mettre à jour la question avec ce que vous avez essayé et ce qui a été retourné.
EightBitTony
Salut Tony - merci d'avoir essayé d'aider - je suis perplexe avec tout ça!
siliconpi
Salut Tony - avez-vous eu l'occasion de regarder le Edit1 détaillé?
siliconpi
Oui, rien ne sort. Ma seule requête est ce qui est dans login.aspx lorsque vous le récupérez du premier wget? Cela indique-t-il que vous vous êtes connecté avec succès?
EightBitTony
2

Peut-être que cela vous aidera. Le site auquel j'essayais de me connecter avait des champs cachés que je devais obtenir avant de pouvoir me connecter avec succès. Ainsi, le premier wget obtient la page de connexion pour trouver les champs supplémentaires, le second wget se connecte au site et enregistre les cookies, le troisième utilise ensuite ces cookies pour obtenir la page que vous recherchez.

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

Il y a quelques informations utiles sur cet autre article SO:

tpow
la source
1
Veuillez essayer de dépersonnaliser votre réponse (supprimez le «I»). En dehors de cela, pour l'une de vos premières réponses, vous faites bien.
wizlog