2013-04-14 19 views
168

Ho letto che Send cookies with curl opere, ma non per mearricciatura: come inviare i cookie tramite la riga di comando?

Ho un REST endpoint come

class LoginResource(restful.Resource): 
    def get(self): 
     print(session) 
     if 'USER_TOKEN' in session: 
      return 'OK' 
     return 'not authorized', 401 

quando provo ad accedere come

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"% 

dove il mio ~/Downloads/cookies.txt è

cat ~/Downloads/cookies.txt 
USER_TOKEN=in 

e il server non riceve nulla

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 - 

cosa mi manca?

+0

Penso che l'aggiunta dell'opzione '-c' dice a' curl' di usare il file cookie come jar di uscita, che potrebbe non essere quello che vuoi. – Blender

+0

anche quello con opzione '-b' non funziona, dando lo stesso errore :( – daydreamer

+0

il formato del file' -b' non è solo 'var = value', dovrebbe essere lo stesso del formato del cookie jar scritto usando '-c'. Vai a un sito che invia i cookie con questa opzione e dai un'occhiata al file risultante – Barmar

risposta

284

questo ha lavorato per me

curl -v --cookie "USER_TOKEN=Yes" http://127.0.0.1:5000/ 

ho potuto vedere il valore nel back-end utilizzando

print request.cookies 
+13

Finché non hai mai, mai un booleano per un token utente come cookie, dato che può semplicemente autenticarsi senza accedere in quel modo. – matts1

+13

Secondo la pagina man, per l'opzione '-b, --cookie', ad esempio' curl -b ', se l'argomento è una stringa con ''='' simbolo, viene passato così com'è, altrimenti viene trattato come un nome file per leggere cookie da. – ryenus

+18

più cookie possono essere impostati con punto e virgola '--cookie" key1 = val1; key2 = val2; ..."' – Olexandr

48

è possibile fare riferimento a https://curl.haxx.se/docs/http-cookies.html per un tutorial completo su come lavorare con i biscotti. è possibile utilizzare

curl -c /path/to/cookiefile http://yourhost/ 

di scrivere in un file cookie e avviare il motore e l'uso dei cookie è possibile utilizzare

curl -b /path/to/cookiefile http://yourhost/ 

per leggere i cookie da e avviare il motore dei cookie, o se non è un il file passerà sulla stringa data.

+0

IMO non hai migliorato il documento ufficiale che è chiaro come fango - __deide l'overloading__ del flag '-b' qual è il diff essenziale tra' -c' & '-b' entrambi avviano il motore e puntano a un file cookie? – nhed

+1

@nhed' -c' * scrive * nel file cookie, '-b' legge da esso. Quindi quando si inviano le credenziali per un modulo di accesso si specificare '-c' per scrivere il cookie risultante in un file, quindi si userà' -b' per leggere e includere il cookie nella richiesta successiva. – Madbreaks

+12

Oppure fare 'curl -b cookiefile -c cookiefile https: // yourhost/'per leggere * e * scrivere nello stesso negozio di cookie come fanno i browser. – LinuxDisciple

12

Si sta utilizzando un formato errato nel file cookie. Come afferma curl documentation, utilizza un vecchio formato di file cookie Netscape, che è diverso dal formato utilizzato dai browser web. Se hai bisogno di creare manualmente un file cookie arricciato, this post dovrebbe aiutarti. Nel tuo esempio il file deve contenere le seguenti linea

127.0.0.1 FALSE / FALSE 0 USER_TOKEN in 

avere 7 campi separati da tabulazione che significa dominio, tailmatch, percorso, sicuro, scade, nome, valore .

+0

Sì, questo è il formato cookie cURL. Questi sono TAB e non SPAZI. – erm3nda

Problemi correlati