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 de données postales sur la page de connexion, puis télécharger la page en tant qu’utilisateur authentifié?

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!) Ou que la demande échouera probablement. Assurez-vous également que l’ user et le password sont les clés correctes. Vous pouvez trouver les clés correctes en analysant le code HTML de la page de connexion (consultez la fonction «inspect element» de votre navigateur et recherchez l’atsortingbut name sur les champs nom d’utilisateur et mot de passe).

J’ai directement donné des cookies d’une connexion existante à wget avec –no-cookies et l’en-tête de requête HTTP Cookie. Dans mon cas, c’était une connexion à l’université Moodle où la connexion est plus complexe (utilisation de plusieurs requêtes avec un ticket de connexion). J’ai ajouté –post-data car c’était une requête POST. Par exemple, obtenez toutes les listes d’utilisateurs Moodle:

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

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

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

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

capture d'écran Utilisez “Copier en tant que cURL” dans l’onglet Réseau des outils de développement (rechargez la page après ouverture) et remplacez l’indicateur d’en-tête de curl -H par l’en-tête de wget.

S’ils utilisent l’authentification de base:

 wget http://username:password@www.domain.com/page.html 

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

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

Je voulais un one-liner qui ne télécharge aucun fichier; Voici un exemple de canalisation de la sortie de cookie dans la requête suivante. J’ai seulement testé ce qui suit 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' 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 cela soit probablement lié à votre navigateur)

Si vous voulez que la sortie soit enregistrée dans un fichier, changez -O - en -O /some/file/name

J’ai utilisé une solution qui utilisait lynx et wget. Lorsque vous souhaitez utiliser wget pour télécharger un fichier depuis un site qui nécessite une connexion, vous avez juste besoin d’un fichier de cookie. Pour générer le fichier cookie, je choisis le lynx. Lynx est un navigateur Web de texte. D’abord, vous avez besoin d’un fichier de configuration pour que lynx enregistre les cookies. 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 

Ensuite, 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 et que vous avez sélectionné l’option «Préservez-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. Le dans le répertoire actuel, vous trouverez un fichier de cookie nommé cookie.file. C’est ce dont nous avons besoin pour wget.

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

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

Exemple pour télécharger avec wget sur le serveur un gros lien de fichier qui peut être obtenu dans votre navigateur.

Dans l’exemple utilisant Google Chrome.

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

entrer la description de l'image ici

Ensuite, ouvrez DevTools sur une page où vous vous connectez, allez dans Console et récupérez vos cookies, en entrant document.cookie

entrer la description de l'image ici

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

entrer la description de l'image ici