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

46

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

Y a-t-il un moyen 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
utilisateur784637
la source

Réponses:

50

Le moyen le plus simple: connectez-vous avec votre navigateur et donnez les cookies pour 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 les pages comme si vous étiez connecté .

Si vous utilisez Firefox, vous pourrez le faire facilement via le module complémentaire Export Cookies . Installez le module complémentaire et:

  1. Allez dans Outils ... Exporter les cookies et sauvegardez le cookies.txtfichier (vous pouvez changer le nom du fichier / la destination).
  2. Ouvrez un terminal et utilisez-le wgetavec l' --load-cookies=FILENAMEoption, par exemple

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • Pour curl , c'estcurl --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

  • Un détail comment faire est au - delà de la portée de cette réponse, mais vous utilisez boucle avec le --cookie-jarou wget avec les --save-cookies --keep-session-cookiesoptions, ainsi que la méthode PUT HTTP / S pour se connecter à un site, enregistrez les témoins de connexion, puis les utiliser 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.
  • Conseil: si vous choisissez cette voie, il est souvent beaucoup plus simple de traiter avec la version mobile d'un site Web (si disponible), du moins pour l'étape d'authentification.
ish
la source
1
Bon conseil. Le code du site mobile est souvent plus propre.
CousinCocaine
4
à quoi ressemble un tel cookies.txt?
Frédéric Nord
Ce module complémentaire "Exporter les cookies" a créé un fichier de cookies contenant les cookies pour chaque site auquel j'ai accédé dans Firefox. Donc, si vous suivez cette réponse, vous présenterez tous vos cookies sur le site que vous visitez. Je considère cela comme une faille de sécurité dans cette réponse. Vous pouvez facilement contourner ce problème en utilisant: grep mydomain cookies.txt > mydomain-cookies.txt
erik.weathers
Vous pouvez utiliser le module complémentaire Gestionnaire de cookies dans Firefox pour exporter uniquement les cookies sélectionnés.
Hans Ginzel
7

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

  • Ouvrez l'onglet "Réseau" de l' outil "Développeur Web" : Ctrl-Maj-E
  • Visitez la page que vous souhaitez enregistrer (par exemple, une photo derrière un identifiant)
  • Cliquez avec le bouton droit sur la demande et choisissez "Copier" -> "Copier comme cURL".

Cela vous donnera une commande que vous pouvez coller directement dans votre shell, qui a 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.

BlackShift
la source
4

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

curl www.target-url.com -c cookie.txtpuis sauvegardera un fichier nommé cookie.txt. Mais vous devez vous connecter, si besoin d'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 "full": Vous ne pouvez pas rendre javascript avec cURL, obtenez juste le code source.

erm3nda
la source
1
-Xparamètre signifie "do post", mais utiliser --data=xxx -Xest implicite, vous pouvez donc le supprimer.
erm3nda
-bestread cookie
Timo
3

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

  1. Installez l'extension à partir de la boutique en ligne Chrome .
  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!

jehon
la source
2

L'article de 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é.

Falko Menge
la source
2

jetez un oeil à cliget pour Firefox.

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

Weberjn
la source
1

Avez-vous essayé cela?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A
Corey Whitaker
la source
oui - malheureusement cela n'a pas fonctionné = (
user784637
6
Remarque: cette syntaxe ne fonctionne que pour l'authentification HTTP de base (votre navigateur affiche une boîte de dialogue spéciale Nom d'utilisateur / mot de passe), mais pas pour l'authentification par page Web.
Ish
Le format de base de l’authentification HTTP de base est admin: [email protected] mais, comme @izx l’a dit, HTTP de base est une fonctionnalité du navigateur, pas de programmation PHP ni de code. Si un jour vous avez besoin d'accéder à une URL protégée par htaccess, vous pouvez utiliser ce mode; D
erm3nda
Je n'ai pas voté vers le bas, mais ce n'est pas un bon moyen de s'authentifier: si vous rendez par hasard public de tels scripts, les gens peuvent utiliser votre mot de passe.
Willem Van Onsem
1
Qu'en est-il des votes négatifs? Peut-être pas une réponse à tous mais toujours une réponse.
Overcode
1

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?

Kenorb
la source
Juste comme n'importe quelle sortie. Utilisez > filename.htmlpour enregistrer la sortie dans le répertoire en cours ou pour mettre un chemin de fichier complet. Ceci s'applique aux systèmes Linux et Windows.
erm3nda
Donc, je vois que wget a beaucoup de fonctionnalités comme cURL, ou vice versa. Il peut faire du POST, il peut donc se connecter à des sites Web. Intéressant.
erm3nda
1

Pour les connexions de site Web plus complexes, vous devez également envisager d'utiliser un script Python et un module imitant un navigateur, tel que http://wwwsearch.sourceforge.net/mechanize/ au lieu de curlou 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 "script" vous-même tout au long du processus de connexion, comme si vous utilisiez votre navigateur Web.

StW
la source
Ouais, utiliser mécaniser peut être vraiment sympa. Aussi (et à l'origine) disponible en Perl, si c'est plus votre tasse de thé.
andol