Leí que Enviar cookies con curl funciona, pero no para mí.
Tengo un REST
punto final como:
class LoginResource(restful.Resource):
def get(self):
print(session)
if 'USER_TOKEN' in session:
return 'OK'
return 'not authorized', 401
Cuando intento acceder como:
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"%
Donde mi ~/Downloads/cookies.txt
es:
cat ~/Downloads/cookies.txt
USER_TOKEN=in
y el servidor no recibe nada:
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é es lo que me falta?
-c
opción le dicecurl
que use su archivo de cookie como el tarro de cookies de salida, que podría no ser lo que desea.-b
opción sola tampoco funciona, dando el mismo error :(-b
archivo de cookies no es solovar=value
, debe ser el mismo que el formato del tarro de cookies escrito usando-c
. Vaya a un sitio que envíe cookies con esta opción y eche un vistazo al archivo resultante.Respuestas:
Esto funcionó para mí:
Pude ver el valor en el backend usando
fuente
-b, --cookie
, por ejemplocurl -b <file-or-pairs>
, si el argumento es una cadena que tiene el'='
símbolo, se pasa como está, de lo contrario, se trata como un nombre de archivo para leer la cookie.--cookie "key1=val1;key2=val2;..."
Puede consultar https://curl.haxx.se/docs/http-cookies.html para obtener un tutorial completo sobre cómo trabajar con cookies. Puedes usar
para escribir en un archivo de cookies e iniciar el motor y usar cookies, puede usar
para leer las cookies e iniciar el motor de cookies, o si no es un archivo, pasará la cadena dada.
fuente
-b
bandera de lo que es el diff esencial entre-c
y-b
ambos se arranque el motor y punto a un archivo de cookies?-c
escribe en el archivo de cookies,-b
lee de él. Por lo tanto, al enviar credenciales para un formulario de inicio de sesión, debe especificar-c
que se escriba la cookie resultante en un archivo, luego se usaría-b
para leer e incluir la cookie en su próxima solicitud.curl -b cookiefile -c cookiefile https://yourhost/
para leer y escribir en la misma tienda de cookies como lo hacen los navegadores.Está utilizando un formato incorrecto en su archivo de cookies. Como dice la documentación de curl , utiliza un antiguo formato de archivo de cookies Netscape, que es diferente del formato utilizado por los navegadores web. Si necesita crear un archivo de cookies curl manualmente, esta publicación debería ayudarlo. En su ejemplo, el archivo debe contener la siguiente línea
teniendo 7 campos separados por TAB que significa dominio , coincidencia , ruta , seguro , caduca , nombre , valor .
fuente
Si ya ha realizado esa solicitud en su aplicación y la ve registrada en Google Dev Tools, puede usar el comando copiar cURL del menú contextual al hacer clic con el botón derecho en la solicitud en la pestaña de red. Copiar -> Copiar como cURL. Contendrá todos los encabezados, cookies, etc.
fuente