web-dev-qa-db-fra.com

Comment passer la page de connexion avec Wget?

J'essaie d'utiliser Wget pour télécharger une page, mais je ne peux pas dépasser l'écran de connexion.

Comment puis-je envoyer le nom d'utilisateur/mot de passe à l'aide des données de publication sur la page de connexion, puis télécharger la page en tant qu'utilisateur authentifié?

242

Basé sur la page de manuel:

# Log in to the server.  This only needs to be done once.
wget --save-cookies cookies.txt \
     --keep-session-cookies \
     --post-data 'user=foo&password=bar' \
     --delete-after \
     http://server.com/auth.php

# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
     http://server.com/interesting/article.php

Assurez-vous que le paramètre --post-data est correctement codé en pourcentage (en particulier les esperluettes!), Sinon la requête échouera probablement. Assurez-vous également que user et password sont les clés correctes. vous pouvez trouver les clés appropriées en consultant le code HTML de la page de connexion (examinez la fonction "inspecter un élément" de votre navigateur et recherchez l’attribut name dans les champs nom d’utilisateur et mot de passe).

318
jarnoan

J'ai directement donné aux cookies d'une connexion existante à wget avec --no-cookies et l'en-tête de requête Cookie HTTP. Dans mon cas, c’était une connexion à l’université Moodle où la connexion semblait plus complexe (utilisation de plusieurs demandes avec un ticket de connexion). J'ai ajouté --post-data car il s'agissait d'une requête POST. Par exemple, obtenez la liste de tous les utilisateurs Moodle:

wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php

51
baptx

Si vous en avez besoin pour une utilisation unique, vous pouvez vous connecter via un navigateur et copier les en-têtes nécessaires par la suite:

screenshot Utilisez "Copier comme cURL" dans l'onglet Réseau des Outils de développement (rechargez la page après l'avoir ouvert) et remplacez l'indicateur d'en-tête de curl -H et --data avec le --header et --post-data de wget.

42
user

J'ai eu le même problème. Ma solution consistait à établir la connexion via Chrome et à enregistrer les données de cookies dans un fichier texte. Cela se fait facilement avec cette extension Chrome: extension d'exportation de cookie.txt de Chrome .

Lorsque vous obtenez les données de cookies, vous trouverez également un exemple d'utilisation avec wget. Une simple ligne de commande copier-coller vous est fournie.

26

Je voulais un one-liner qui ne télécharge aucun fichier; Voici un exemple de transfert de la sortie du cookie dans la requête suivante. J'ai uniquement testé les éléments suivants sur Gentoo, mais cela devrait fonctionner dans la plupart des environnements * nix:

wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page' (il s’agit d’une ligne, bien que celle-ci apparaisse sur votre navigateur)

Si vous souhaitez que la sortie soit sauvegardée dans un fichier, remplacez -O - par -O /some/file/name

10
Caleb Gray

Vous n'avez pas besoin de cURL pour effectuer les données de formulaire POSTed. --post-data 'key1=value1&key2=value2' fonctionne très bien. Remarque: vous pouvez également transmettre un nom de fichier à wget avec les données POST du fichier.

9
J. Piel

S'ils utilisent l'authentification de base:

wget http://username:[email protected]/page.html

S'ils utilisent des données de formulaire POSTed, vous devrez utiliser quelque chose comme cURL .

8
ceejayoz

Une solution utilisant lynx et wget.

Remarque: Lynx doit avoir été compilé avec l'indicateur - enable-persistent-cookies pour que cela fonctionne

Lorsque vous souhaitez utiliser wget pour télécharger un fichier à partir d'un site nécessitant une connexion, vous avez simplement besoin d'un fichier de cookie. Afin de générer le fichier cookie, j'ai choisi Lynx. Lynx est un navigateur web texte. Vous devez d’abord disposer d’un fichier de configuration permettant à Lynx d’enregistrer le cookie. Créez un fichier lynx.cfg. Ecrivez ces configurations dans le fichier.

SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file

Puis lancez lynx avec cette commande:

lynx -cfg=lynx.cfg http://the.site.com/login

Une fois que vous avez entré le nom d'utilisateur et le mot de passe, sélectionnez ensuite "conservez-moi sur ce PC" ou quelque chose de similaire. Si vous vous connectez avec succès, vous verrez une belle page Web de texte du site. Et vous vous déconnectez. Dans le répertoire en cours, vous trouverez un fichier cookie nommé cookie.file. C'est ce dont nous avons besoin pour wget.

Ensuite, wget peut télécharger un fichier du site avec cette commande.

wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz
4
PokerFace

Exemple à télécharger avec wget sur le serveur, un lien de fichier volumineux pouvant être obtenu via votre navigateur.

En utilisant Google Chrome par exemple.

Connectez-vous où vous avez besoin et cliquez sur Télécharger. Allez télécharger et copier votre lien.

enter image description here

Ensuite, ouvrez DevTools sur une page où vous vous êtes connecté, accédez à Console et récupérez vos cookies en entrant document.cookie

enter image description here

Maintenant, allez sur le serveur et téléchargez votre fichier: wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>

enter image description here

1
Alex Ivasyuv