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é?
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).
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
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:
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.
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.
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
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.
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 .
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
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.
Ensuite, ouvrez DevTools sur une page où vous vous êtes connecté, accédez à Console et récupérez vos cookies en entrant document.cookie
Maintenant, allez sur le serveur et téléchargez votre fichier: wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>