Eu li que Enviar cookies com cachos funciona, mas não para mim.
Eu tenho um REST
endpoint como:
class LoginResource(restful.Resource):
def get(self):
print(session)
if 'USER_TOKEN' in session:
return 'OK'
return 'not authorized', 401
Quando tento acessar 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"%
Onde ~/Downloads/cookies.txt
está o meu :
cat ~/Downloads/cookies.txt
USER_TOKEN=in
e o servidor não recebe 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 -
O que é que estou perdendo?
-c
opção dizcurl
para usar seu arquivo de cookie como o pote de cookies de saída, o que pode não ser o que você deseja.-b
opção também não está sozinho trabalhando, dando mesmo erro :(-b
arquivo de cookie não é apenasvar=value
, ele deve ser o mesmo que o formato do jarro de cookie escrito usando-c
. Vá para um site que envia cookies com esta opção e dê uma olhada no arquivo resultante.Respostas:
Isso funcionou para mim:
Eu pude ver o valor no back-end usando
fonte
-b, --cookie
, por exemplocurl -b <file-or-pairs>
, se o argumento é uma string com o'='
símbolo, ele é passado como está, caso contrário, é tratado como um nome de arquivo para o qual ler o cookie.--cookie "key1=val1;key2=val2;..."
Você pode consultar https://curl.haxx.se/docs/http-cookies.html para obter um tutorial completo de como trabalhar com cookies. Você pode usar
para gravar em um arquivo de cookie e iniciar o mecanismo e usar o cookie, você pode usar
para ler cookies e iniciar o mecanismo de cookies, ou, se não for um arquivo, passará para a string especificada.
fonte
-b
bandeira, qual é a diferença essencial entre eles-c
e-b
ambos iniciam o mecanismo e apontam para um arquivo de cookie?-c
grava no arquivo de cookies e-b
lê a partir dele. Portanto, ao enviar credenciais para um formulário de login, você especificaria-c
a gravação do cookie resultante em um arquivo e utilizaria-b
para ler e incluir o cookie na sua próxima solicitação.curl -b cookiefile -c cookiefile https://yourhost/
para ler e gravar na mesma loja de cookies que os navegadores fazem.Você está usando um formato errado no seu arquivo de cookie. Como a documentação do curl indica, ele usa um formato de arquivo de cookie Netscape antigo, diferente do formato usado pelos navegadores da web. Se você precisar criar um arquivo de cookie de ondulação manualmente, esta postagem deverá ajudá-lo. No seu exemplo, o arquivo deve conter a seguinte linha
tendo 7 campos separados por TAB, que significam domínio , correspondência , caminho , seguro , expira , nome , valor .
fonte
Se você já fez essa solicitação no seu aplicativo e o vê logado no Google Dev Tools, você pode usar o comando copy cURL no menu de contexto ao clicar com o botão direito do mouse na solicitação na guia rede. Copiar -> Copiar como cURL. Ele conterá todos os cabeçalhos, cookies, etc.
fonte