86 votes

Wget avec authentification

Comment puis-je télécharger une page web qui nécessite un nom d'utilisateur et un mot de passe ?

Par exemple, je veux télécharger cette page après avoir saisi un nom d'utilisateur et un mot de passe :

http://forum.ubuntu-it.org/index.php

148voto

Darryl E. Clarke Points 2580

En utilisant les options :

--password=PASS
--user=USERNAME

c.-à-d. : wget http://myurl.com --user=joe --password=schmoe

80voto

icyrock.com Points 13698

Essayez la solution présentée ici :

Note pour les autres qui pourraient tomber sur ceci :

  • Le code ci-dessus simule l'utilisateur qui effectue une connexion manuelle sur un site qui a un formulaire avec deux champs de saisie : un nommé user et un nommé password
  • Le formulaire a son attribut action défini sur http://server.com/auth.php
  • Le formulaire n'utilise pas JavaScript
    • Un bon indice pour savoir s'il utilise JavaScript est un attribut onsubmit sur l'élément du formulaire
    • Notez que ce n'est de loin pas la seule façon de définir les attributs - utiliser JavaScript n'importe où sur la page ou l'un des fichiers de script chargés statiquement ou dynamiquement peut modifier les éléments du formulaire
  • La meilleure façon de vérifier cela est de charger la page et de faire une inspection en direct avec par exemple Firebug pour Firefox

Donc, si les noms des attributs et l'url de l'action du formulaire sont différents, vous devez changer les paramètres de la première commande wget en conséquence.

S'il utilise JavaScript, il y a une chance que cela ne fonctionne pas du tout - par exemple, dans le cas de l'exemple de site Web des OPs, il utilise un hachage JavaScript côté client, donc l'appel extérieur utilisant wget ne définit pas les champs nécessaires sur le formulaire (dans le cas du site Ubuntu, le champ hash_passwrd).

22voto

J-16 SDiZ Points 14191

Les commandes wget suivantes devraient vous permettre d'accéder aux pages d'un site web qui nécessite un nom d'utilisateur et un mot de passe :

wget http://nom_utilisateur:mot_de_passe@example.org/url/
wget --http-user=user --http-password=password http://example.org/url/

11voto

tpow Points 171

Peut-être que cela aidera. Le site sur lequel j'essayais de me connecter avait quelques 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 deuxième wget se connecte au site et enregistre les cookies, le troisième utilise ensuite ces cookies pour obtenir la page que vous recherchez.

#!/bin/sh

# obtenir la page de connexion pour obtenir les données du champ caché
wget -a log.txt -O loginpage.html http://foobar/default.aspx
hiddendata=`grep value < loginpage.html | grep foobarhidden | tr '=' ' ' | awk '{print $9}' | sed s/\"//g`
rm loginpage.html

# se connecter à la page et enregistrer les 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

# obtenir la page que vous recherchez
wget -a log.txt -O results.html --load-cookies cookies.txt http://foobar/lister.aspx?id=42
rm cookies.txt

Il y a des informations utiles dans ce autre post : superuser -> using wget to download pdf files from a site that requires cookies to be set

6voto

lijie Points 3544

Utilisez les options --user=X --password=Y pour spécifier un nom d'utilisateur X et un mot de passe de Y.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X