Comment passer la page de connexion avec Wget?
j'essaie d'utiliser Wget pour télécharger une page, mais je ne peux pas passer l'écran de connexion.
Comment puis-je envoyer le nom d'utilisateur/mot de passe en utilisant les données de poste sur la page de connexion et ensuite télécharger la page actuelle en tant qu'utilisateur authentifié?
9 réponses
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 pourcentage-encodé (surtout les ampersands!) ou à la demande va probablement échouer. Assurez-vous également que user
et password
sont les bonnes clés; vous pouvez trouver les bonnes clés en parcourant le HTML de la page de connexion (regardez dans la fonction "inspecter l'élément" de votre navigateur et trouvez l'attribut name
sur le nom d'utilisateur et champs de mot de passe).
j'ai directement donné des cookies d'une connexion existante à wget avec --no-cookies et l'en-tête Cookie HTTP request. Dans mon cas, il s'agissait d'un login de L'Université Moodle où la connexion semble plus complexe (en utilisant plusieurs requêtes avec un ticket de login). J'ai ajouté -- post-data parce que c'était une requête POST. Par exemple, obtenir la liste de tous les utilisateurs de 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 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'ouverture) et remplacez le drapeau d'en-tête de curl
-H
et --data
par --header
et --post-data
de wget .
j'ai eu le même problème. Ma solution était de faire la connexion via Chrome et de sauvegarder les données des cookies dans un fichier texte. Cela se fait facilement avec cette extension Chrome: cookie Chrome.txt exportation extension .
lorsque vous obtenez les données des cookies, Il ya aussi un exemple sur la façon de les utiliser avec wget. Une ligne de commande simple copier-coller vous est fournie.
vous n'avez pas besoin de cURL pour faire les données de formulaire postées. --post-data 'key1=value1&key2=value2'
fonctionne très bien. Note: vous pouvez également passer un nom de fichier à wget avec les données POST dans le fichier.
je voulais une doublure unique qui ne téléchargeait aucun fichier; voici un exemple de canalisation de la sortie du cookie dans la requête suivante. J'ai seulement testé ce qui suit sur Gentoo, mais il 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'
(c'est une ligne, mais il est probable s'enroule sur votre navigateur)
si vous voulez que la sortie soit sauvegardée dans un fichier, changez -O -
en -O /some/file/name
j'ai utilisé une solution qui a utilisé lynx et wget. Lorsque vous souhaitez utiliser wget pour télécharger un fichier à partir d'un site qui requiert une connexion, vous avez juste besoin d'un fichier cookie. Pour générer le fichier cookie, je choisis lynx. lynx est un navigateur Web de texte. Tout d'abord, vous avez besoin d'un fichier configure pour lynx pour enregistrer cookie. Créer un fichier lynx.cfg. Écrivez cette configuration dans le fichier.
SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file
puis lancer lynx avec cette commande:
lynx -cfg=lynx.cfg http://the.site.com/login
après vous saisissez le nom d'utilisateur et le mot de passe, et sélectionnez "preserve me on this 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 déconnecter. Le dans le répertoire courant, vous trouverez un fichier cookie nommé comme témoin.fichier. C'est ce dont nous avons besoin pour wget.
alors wget peut télécharger le fichier à partir 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 grand lien de fichier qui peut être obtenu dans votre navigateur.
dans L'exemple en utilisant Google Chrome.
connectez-vous où vous avez besoin, et appuyez sur Télécharger. Télécharger et copier votre lien.
puis ouvrir DevTools sur une page où vous login, aller à Console et obtenir 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>