web-dev-qa-db-fra.com

CURL pour accéder à une page nécessitant une connexion depuis une autre page

J'ai 2 pages: xyz.com/a et xyz.com/b. Je ne peux accéder à xyz.com/b que si et seulement si je me connecte d'abord à xyz.com/a. Si j'accède à xyz.com/b sans passer par l'autre, j'obtiens simplement un accès refusé (pas de redirection de connexion) via le navigateur. Une fois 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 à l'aide de curl, mais essayez ensuite xyx.com/b et l'accès est 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 ne fonctionne toujours pas. Les deux pages utilisent la même autorité de certification. Ce n'est donc pas un problème. Aucune suggestion? Merci

96
ms1013

Le site Web utilise probablement cookies pour stocker les informations de votre session. Quand tu cours

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 êtes connecté à la page a dans une session de navigateur et que vous avez essayé d'accéder à la page b dans une autre.

Ce que vous devez faire est de enregistrer les cookies créés par la première commande:

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

puis relisez-les lors de l'exécution du second:

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

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

116
Mechanical snail

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 des Outils de développement, connectez-vous, accédez à la page souhaitée, utilisez "Copier en tant que cURL".

screenshot

88
user

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

Aucune idée si cela fonctionne, mais cela pourrait vous conduire dans la bonne direction.

46
Joe Mills