J'ai lu que Envoyer des cookies avec curl fonctionne, mais pas pour moi.
J'ai un REST
point final comme:
class LoginResource(restful.Resource):
def get(self):
print(session)
if 'USER_TOKEN' in session:
return 'OK'
return 'not authorized', 401
Lorsque j'essaie d'accéder en tant que:
curl -v -b ~/Downloads/cookies.txt -c ~/Downloads/cookies.txt http://127.0.0.1:5000/
* About to connect() to 127.0.0.1 port 5000 (#0)
* Trying 127.0.0.1...
* connected
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.27.0
> Host: 127.0.0.1:5000
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 401 UNAUTHORIZED
< Content-Type: application/json
< Content-Length: 16
< Server: Werkzeug/0.8.3 Python/2.7.2
< Date: Sun, 14 Apr 2013 04:45:45 GMT
<
* Closing connection #0
"not authorized"%
Où ~/Downloads/cookies.txt
est ma :
cat ~/Downloads/cookies.txt
USER_TOKEN=in
et le serveur ne reçoit rien:
127.0.0.1 - - [13/Apr/2013 21:43:52] "GET / HTTP/1.1" 401 -
127.0.0.1 - - [13/Apr/2013 21:45:30] "GET / HTTP/1.1" 401 -
<SecureCookieSession {}>
<SecureCookieSession {}>
127.0.0.1 - - [13/Apr/2013 21:45:45] "GET / HTTP/1.1" 401 -
Qu'est-ce qui me manque?
-c
option indiquecurl
d'utiliser votre fichier cookie comme pot de cookie de sortie, ce qui pourrait ne pas être ce que vous voulez.-b
option seul ne fonctionne pas non plus, donnant la même erreur :(-b
fichier cookie n'est pas seulementvar=value
, il doit être le même que le format du fichier cookie écrit en utilisant-c
. Accédez à un site qui envoie des cookies avec cette option et jetez un œil au fichier résultant.Réponses:
Cela a fonctionné pour moi:
Je pouvais voir la valeur du backend en utilisant
la source
-b, --cookie
, par exemplecurl -b <file-or-pairs>
, si l'argument est une chaîne ayant le'='
symbole, il est passé tel quel, sinon il est traité comme un nom de fichier à partir duquel lire le cookie.--cookie "key1=val1;key2=val2;..."
Vous pouvez vous référer à https://curl.haxx.se/docs/http-cookies.html pour un tutoriel complet sur la façon de travailler avec les cookies. Vous pouvez utiliser
pour écrire dans un fichier cookie et démarrer le moteur et pour utiliser un cookie, vous pouvez utiliser
pour lire les cookies et démarrer le moteur de cookies, ou s'il ne s'agit pas d'un fichier, il transmettra la chaîne donnée.
la source
-b
drapeau, quelle est la différence essentielle entre les deux-c
et-b
ils démarrent le moteur et pointent vers un fichier cookie?-c
écrit dans le fichier cookie, y-b
lit. Ainsi, lorsque vous envoyez des informations d'identification pour un formulaire de connexion, vous devez spécifier-c
d'écrire le cookie résultant dans un fichier, puis vous devez utiliser-b
pour lire et inclure le cookie dans votre prochaine demande.curl -b cookiefile -c cookiefile https://yourhost/
pour lire et écrire dans le même magasin de cookies que les navigateurs.Vous utilisez un mauvais format dans votre fichier cookie. Comme l' indique la documentation de curl , il utilise un ancien format de fichier de cookie Netscape, qui est différent du format utilisé par les navigateurs Web. Si vous devez créer un fichier de cookies curl manuellement, ce message devrait vous aider. Dans votre exemple, le fichier doit contenir la ligne suivante
ayant 7 champs séparés par TAB signifiant domaine , match arrière , chemin , sécurisé , expire , nom , valeur .
la source
Si vous avez déjà fait cette demande dans votre application et que vous la voyez connectée dans Google Dev Tools, vous pouvez utiliser la commande copier cURL dans le menu contextuel lorsque vous cliquez avec le bouton droit sur la demande dans l'onglet réseau. Copier -> Copier en tant que cURL. Il contiendra tous les en-têtes, cookies, etc.
la source