146 votes

CURL pour accéder à une page qui nécessite une connexion à partir d'une autre page

J'ai 2 pages : xyz.com/a y xyz.com/b . Je ne peux accéder qu'à xyz.com/b si et seulement si je me connecte à xyz.com/a d'abord. Si vous accédez xyz.com/b sans passer par l'autre, j'obtiens simplement un accès refusé (pas de redirection vers le login) via le navigateur. Une fois que je me suis connecté à xyz.com/a je peux accéder à l'autre.

Mon problème est de le faire en utilisant la commande curl. Je peux me connecter avec succès à xyz.com/a en utilisant curl, mais ensuite essayez xyx.com/b et j'obtiens un accès refusé.

J'utilise les éléments suivants :

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

J'ai essayé d'utiliser la deuxième ligne avec et sans la partie utilisateur/mot de passe et cela ne fonctionne toujours pas. Les deux pages utilisent le même CA, donc ce n'est pas un problème. Avez-vous des suggestions ? Merci

182voto

user Points 1438

Vous pouvez également vous connecter via un navigateur et obtenir la commande avec tous les en-têtes, y compris les cookies :

Ouvrez l'onglet Réseau de Developer Tools, connectez-vous, naviguez jusqu'à la page requise, utilisez "Copy as cURL".

screenshot

181voto

Mechanical snail Points 8589

Le site web utilise probablement cookies pour stocker vos informations de session. Lorsque vous exécutez

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curl est exécuté deux fois, en deux sessions distinctes. Ainsi, lorsque la deuxième commande est exécutée, les cookies définis par la première commande ne sont pas disponibles ; c'est comme si vous vous étiez connecté à la page a dans une session de navigation, et a essayé d'accéder à la page b dans un autre.

Ce que vous devez faire, c'est sauver les cookies créés par la première commande :

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

puis les relire lors de l'exécution de la seconde :

curl --cookie ./somefile https://xyz.com/b

Sinon, vous pouvez essayer de télécharger les deux fichiers dans la même commande, ce qui, je pense, utilisera les mêmes cookies.

56voto

Joe Mills Points 766

Après quelques recherches sur Google, j'ai trouvé ceci :

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b

Je ne sais pas si ça marche, mais ça pourrait vous mener dans la bonne direction.

5voto

JavaScriptDude Points 140

Ma réponse est un mod de certaines réponses antérieures de @JoeMills et @user.

  1. Obtenir un cURL pour se connecter au serveur :

    • Chargez la page de connexion du site Web et ouvrez le volet Réseau des outils de développement.
      • Dans Firefox, cliquez avec le bouton droit de la souris sur la page, choisissez "Inspecter l'élément (Q)" et cliquez sur l'onglet Réseau.
    • Accédez au formulaire de connexion, entrez votre nom d'utilisateur et votre mot de passe et connectez-vous.
    • Après vous être connecté, retournez dans le volet Réseau et faites défiler vers le haut pour trouver l'entrée POST. Cliquez avec le bouton droit de la souris et choisissez Copier -> Copier en tant que CURL.
    • Collez ceci dans un éditeur de texte et essayez-le dans l'invite de commande pour voir si cela fonctionne.
      • Il est possible que certains sites disposent d'un système de protection qui bloque ce type d'usurpation d'identité, ce qui nécessiterait d'autres étapes pour le contourner.
  2. Modifier la commande cURL pour pouvoir sauvegarder le cookie de session après la connexion

    • Supprimer l'entrée -H 'Cookie: <somestuff>'
    • Ajouter après curl au début -c login_cookie.txt
    • Essayez d'exécuter cette commande curl mise à jour et vous devriez obtenir un nouveau fichier 'login_cookie.txt' dans le même dossier
  3. Appelez une nouvelle page Web en utilisant ce nouveau cookie qui nécessite que vous soyez connecté.

    • curl -b login_cookie.txt <url_that_requires_log_in>

J'ai essayé cela sur Ubuntu 20.04 et cela fonctionne comme un charme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X