Saya membaca bahwa Kirim cookie dengan karya ikal , tetapi tidak untuk saya.
Saya memiliki REST
titik akhir sebagai:
class LoginResource(restful.Resource):
def get(self):
print(session)
if 'USER_TOKEN' in session:
return 'OK'
return 'not authorized', 401
Ketika saya mencoba mengakses sebagai:
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"%
Dimana saya ~/Downloads/cookies.txt
berada:
cat ~/Downloads/cookies.txt
USER_TOKEN=in
dan server tidak menerima apa pun:
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 -
Apa yang saya lewatkan?
-c
opsi memberitahucurl
untuk menggunakan file cookie Anda sebagai toples cookie output, yang mungkin bukan yang Anda inginkan.-b
opsi saja juga tidak berfungsi, memberikan kesalahan yang sama :(-b
file cookie tidak hanyavar=value
, itu harus sama dengan format toples cookie yang ditulis menggunakan-c
. Pergi ke situs yang mengirim cookie dengan opsi ini, dan lihat file yang dihasilkan.Jawaban:
Ini bekerja untuk saya:
Saya bisa melihat nilai di backend menggunakan
sumber
-b, --cookie
, misalnyacurl -b <file-or-pairs>
, jika argumennya adalah string yang memiliki'='
simbol, ia dilewatkan begitu saja, jika tidak maka diperlakukan sebagai nama file untuk membaca cookie dari.--cookie "key1=val1;key2=val2;..."
Anda dapat merujuk ke https://curl.haxx.se/docs/http-cookies.html untuk tutorial lengkap tentang cara bekerja dengan cookie. Kamu bisa memakai
untuk menulis ke file cookie dan memulai mesin dan menggunakan cookie yang dapat Anda gunakan
untuk membaca cookie dari dan memulai mesin cookie, atau jika bukan file itu akan melewati string yang diberikan.
sumber
-b
bendera apa diff penting antara-c
&-b
mereka berdua mulai mesin dan arahkan ke file cookie?-c
menulis ke file cookie,-b
membaca dari itu. Jadi ketika mengirim kredensial untuk formulir login Anda akan menentukan-c
untuk menulis cookie yang dihasilkan ke file, maka Anda akan gunakan-b
untuk membaca dari dan memasukkan cookie dalam permintaan Anda berikutnya.curl -b cookiefile -c cookiefile https://yourhost/
untuk membaca dan menulis ke toko cookie yang sama seperti yang dilakukan browser.Anda menggunakan format yang salah dalam file cookie Anda. Seperti yang dinyatakan oleh dokumentasi curl , ia menggunakan format file cookie Netscape lama, yang berbeda dari format yang digunakan oleh browser web. Jika Anda perlu membuat file cookie keriting secara manual, posting ini akan membantu Anda. Dalam contoh Anda file tersebut harus berisi baris berikut
memiliki 7 bidang yang dipisahkan TAB yang berarti domain , tailmatch , jalur , aman , kedaluwarsa , nama , nilai .
sumber
Jika Anda telah membuat permintaan itu di aplikasi Anda, dan melihatnya masuk di Google Dev Tools, Anda dapat menggunakan perintah salin cURL dari menu konteks saat mengklik kanan permintaan di tab jaringan. Salin -> Salin sebagai CURL. Ini akan berisi semua tajuk, cookie, dll.
sumber