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é?

220
demandé sur Peter Mortensen 2009-08-24 23:59:42

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).

300
répondu jarnoan 2017-09-13 12:14:44

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

44
répondu baptx 2016-02-24 13:02:32

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:

screenshot 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 .

26
répondu user 2018-09-28 00:18:30

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.

24
répondu Thor-Erik Rødland 2015-05-26 00:48:24

S'ils utilisent l'authentification de base:

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

S'ils utilisent des données postées de formulaire, vous aurez besoin d'utiliser quelque chose comme cURL à la place.

8
répondu ceejayoz 2017-05-23 11:33:24

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.

8
répondu J. Piel 2015-05-26 00:47:24

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

8
répondu Caleb Gray 2017-12-26 03:05:04

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
2
répondu PokerFace 2017-10-19 08:32:45

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.

enter image description here

puis ouvrir DevTools sur une page où vous login, aller à Console et obtenir 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
répondu Alex Ivasyuv 2018-04-13 09:24:02