web-dev-qa-db-fra.com

Comment utiliser wget / curl pour télécharger depuis un site auquel je suis connecté?

Certaines parties de wikipedia apparaissent différemment lorsque vous êtes connecté. Je voudrais wget les pages utilisateur afin qu'elles apparaissent comme si j'étais connecté.

Est-il possible de wget des pages utilisateur comme celle-ci

http://en.wikipedia.org/wiki/User:A

c'est la page de connexion:

http://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Login&campaign=ACP3
44
user784637

Le moyen le plus simple: connectez-vous avec votre navigateur et donnez les cookies à wget

Méthode la plus simple: en général, vous devez fournir à wget ​​ou curl les cookies (connectés) d'un site Web particulier pour qu'ils puissent récupérer des pages comme si vous étiez connecté.

Si vous utilisez Firefox, il est facile de le faire via l’add-on [Export Cookies . Installez le module complémentaire et:

  1. Allez à Outils ... Exporter les cookies et enregistrez le fichier cookies.txt (vous pouvez modifier le nom du fichier/la destination).
  2. Ouvrez un terminal et utilisez wget avec l’option --load-cookies=FILENAME, par exemple.

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    
    • Pour curl, c'est curl --cookie cookies.txt ...

(Je vais essayer de mettre à jour cette réponse pour les utilisateurs de Chrome/Chromium)

Le plus difficile: utilisez curl (de préférence) ou wget ​​pour gérer toute la session

  • Une procédure détaillée dépasse le cadre de cette réponse, mais vous utilisez curl avec le --cookie-jar ou wget ​​avec les --save-cookies --keep-session-cookiesoptions, ainsi que la méthode HTTP/S PUT pour vous connecter. sur un site, enregistrez les cookies de connexion, puis utilisez-les pour simuler un navigateur.
  • Inutile de dire que cela nécessite de passer par la source HTML pour la page de connexion (obtenir les noms des champs de saisie, etc.), et il est souvent difficile de se rendre au travail pour des sites utilisant autre chose qu'une simple authentification par login/mot de passe.
  • Astuce: si vous choisissez cette voie, il est souvent beaucoup plus simple de gérer la version mobile d'un site Web (si disponible). ), au moins pour l'étape d'authentification.
48
ish

Une autre solution facile qui a fonctionné pour moi sans rien installer de plus:

Cela vous donnera une commande que vous pouvez coller directement dans votre Shell, avec toutes vos informations d'identification de cookie, par exemple.

curl 'https://mysite.test/my-secure-dir/picture1.jpg' \ 
-H 'User-Agent: Mozilla/5.0 ...' \
-H 'Cookie: SESSIONID=abcdef1234567890'

Vous pouvez ensuite modifier l'URL dans la commande pour récupérer ce que vous voulez.

5
BlackShift

Avec cURL, il est très facile de gérer les cookies de deux manières.

curl www.target-url.com -c cookie.txt enregistrera ensuite un fichier nommé cookie.txt. Mais vous devez vous connecter, vous devez donc utiliser --data avec des arguments tels que: curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txt. Une fois que vous avez enregistré un cookie, vous pouvez l'envoyer avec: curl www.target-url.com/?user-page.php -b cookie.txt

Utilisez simplement -c (--cookie) ou -b (--cookie-jar) pour enregistrer et envoyer.

Note1: Utiliser cURL CLI est beaucoup plus facile que PHP et peut-être plus rapide;)

Pour enregistrer le contenu final, vous pouvez facilement ajouter > filename.html à votre commande cURL, puis enregistrer le code HTML complet.

Note2 sur "complet": Vous ne pouvez pas rendre javascript avec cURL, obtenez simplement le code source.

4
erm3nda

Pour ceux toujours intéressés par ces questions, il existe une extension très utile Chrome appelée CurlWGet qui vous permet de générer une demande wget/curl avec des mesures d'authentification, etc. en un clic. Pour installer cette extension, suivez les étapes ci-dessous:

  1. Installez l'extension à partir de Chrome Webstore .
  2. Allez sur la page Web que vous souhaitez télécharger.
  3. Commencez le téléchargement.
  4. L'extension générera un lien pour vous.

Prendre plaisir!

3
jehon

jetez un œil à cliget pour Firefox.

Lorsque vous êtes sur le point de télécharger, dans la boîte de dialogue de téléchargement finale, vous avez la possibilité de copier le téléchargement en ligne de commande curl dans le Presse-papiers.

2
weberjn

Le blog Wget with Firefox Cookies montre comment accéder au fichier de données SQLite dans lequel Firefox stocke ses cookies. De cette façon, il n'est pas nécessaire d'exporter manuellement les cookies pour une utilisation avec wget. Un commentaire suggère que cela ne fonctionne pas avec les cookies de session, mais cela a bien fonctionné pour les sites avec lesquels je l'ai essayé.

2
Falko Menge

Essayez quelque chose comme:

wget --keep-session-cookies --save-cookies cookies.txt --post-data 'user=goyamy&passwrd=mypassword' http://forum.ubuntu-it.org/

Voir aussi ce lien:

Comment télécharger cette page web avec wget?

1
kenorb

Pour les connexions au site Web plus complexes, vous devez également envisager d'utiliser un script Python et un module imitant un navigateur, comme http://wwwsearch.sourceforge.net/mechanize/ de curl ou wget.

De cette façon, les cookies de session sont gérés automatiquement, vous pouvez suivre les liens et remplir les formulaires de connexion, et ainsi "écrire" vous-même dans le processus de connexion comme si vous utilisiez votre navigateur Web.

1
StW

Avez-vous essayé cela?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A
1
Corey Whitaker