วิธีใช้ cURL เพื่อส่งคุกกี้


296

ฉันอ่านแล้วว่าส่งคุกกี้ด้วย curlใช้ได้ แต่ไม่ใช่สำหรับฉัน

ฉันมีRESTจุดสิ้นสุดเป็น:

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

เมื่อฉันพยายามเข้าถึงเป็น:

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

ฉันอยู่ที่ไหน~/Downloads/cookies.txt:

cat ~/Downloads/cookies.txt
USER_TOKEN=in

และเซิร์ฟเวอร์ไม่ได้รับอะไรเลย:

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 -

อะไรที่ฉันขาดหายไป?


ฉันคิดว่าการเพิ่ม-cตัวเลือกบอกcurlให้ใช้ไฟล์คุกกี้ของคุณเป็น jar jar ของเอาต์พุตซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ
เครื่องปั่น

-bตัวเลือกที่มีตัวเลือกอย่างเดียวไม่ทำงานทำให้เกิดข้อผิดพลาดเดียวกัน :(
daydreamer

รูปแบบของ-bไฟล์คุกกี้ไม่ได้เป็นเพียงก็ควรจะเป็นเช่นเดียวกับรูปแบบของโถคุกกี้ที่เขียนโดยใช้var=value -cไปที่ไซต์ที่ส่งคุกกี้ด้วยตัวเลือกนี้และดูไฟล์ผลลัพธ์
Barmar

-b cookie_file ควรอยู่ในรูปแบบ Netscape / Mozilla หรือส่วนหัว HTTP ธรรมดา นี่คือตัวอย่างของส่วนหัว http ธรรมดา: Set-cookie: cookie_name = cookie_value; นี่คือขั้นต่ำเปล่า อย่าลืมอัฒภาคในตอนท้าย
อเล็กซ์

คำตอบ:


492

สิ่งนี้ใช้ได้กับฉัน:

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

ฉันเห็นค่าในแบ็กเอนด์โดยใช้

print request.cookies

17
ตราบใดที่คุณไม่เคยมีบูลีนสำหรับโทเค็นผู้ใช้เป็นคุกกี้เนื่องจากพวกเขาสามารถรับรองความถูกต้องตัวเองได้โดยไม่ต้องเข้าสู่ระบบ
matts1

15
ตามหน้า man สำหรับตัวเลือก-b, --cookieเช่นcurl -b <file-or-pairs>ถ้าอาร์กิวเมนต์เป็นสตริงที่มี'='สัญลักษณ์มันจะถูกส่งผ่านตามปกติมิฉะนั้นจะถือว่าเป็นชื่อไฟล์เพื่ออ่านคุกกี้จาก
ryenus

61
สามารถตั้งค่าคุกกี้หลายรายการด้วยเซมิโคลอน--cookie "key1=val1;key2=val2;..."

ทำไมคำตอบนี้ไม่ได้อยู่ด้านบนฉันสงสัยว่า ... การเรียงลำดับคำตอบทุกคนปลั๊กอิน?
iomv

91

คุณสามารถอ้างถึงhttps://curl.haxx.se/docs/http-cookies.htmlสำหรับบทแนะนำที่สมบูรณ์เกี่ยวกับวิธีการทำงานกับคุกกี้ คุณสามารถใช้ได้

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

เพื่อเขียนไปยังไฟล์คุกกี้และสตาร์ทเอ็นจิ้นและใช้คุกกี้ที่คุณสามารถใช้ได้

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

เพื่ออ่านคุกกี้จากและเริ่มเอ็นจิ้นคุกกี้หรือหากไม่ใช่ไฟล์มันจะส่งผ่านสตริงที่กำหนด


1
IMO คุณไม่ได้ปรับปรุงเอกสารอย่างเป็นทางการที่ชัดเจนว่าเป็นโคลน - ข้างๆการบรรทุกเกินพิกัดของ-bธงอะไรคือความแตกต่างที่สำคัญระหว่าง-c& -bพวกเขาทั้งสองเริ่มสตาร์ทเครื่องยนต์และชี้ไปที่ไฟล์คุกกี้?
nhed

4
@nhed -c เขียนไปยังไฟล์คุกกี้-bอ่านจากมัน ดังนั้นเมื่อส่งข้อมูลประจำตัวสำหรับแบบฟอร์มการเข้าสู่ระบบคุณจะระบุ-cให้เขียนคุกกี้ที่เกิดขึ้นกับไฟล์จากนั้นคุณจะใช้-bในการอ่านและรวมถึงคุกกี้ในคำขอถัดไปของคุณ
Madbreaks

26
หรือทำcurl -b cookiefile -c cookiefile https://yourhost/เพื่ออ่านและเขียนไปยังที่เก็บคุกกี้เดียวกันกับเบราว์เซอร์
LinuxDisciple

38

คุณกำลังใช้รูปแบบที่ไม่ถูกต้องในไฟล์คุกกี้ของคุณ ตามเอกสารคู่มือcurlจะใช้รูปแบบไฟล์คุกกี้ Netscape เก่าซึ่งแตกต่างจากรูปแบบที่ใช้โดยเว็บเบราว์เซอร์ หากคุณต้องการสร้างไฟล์คุกกี้ curl ด้วยตนเองโพสต์นี้จะช่วยคุณ ในตัวอย่างของคุณไฟล์ควรมีบรรทัดต่อไปนี้

127.0.0.1   FALSE   /   FALSE   0   USER_TOKEN  in

มี 7 สาขาคั่นด้วยแท็บความหมายโดเมน , tailmatch , เส้นทาง , การรักษาความปลอดภัย , หมดอายุ , ชื่อ , ค่า


2
ใช่นี่คือรูปแบบคุกกี้ cURL นี่คือ TABS ไม่ใช่ SPACES
m3nda

4
สิ่งนี้ควรถูกทำเครื่องหมายเป็นคำตอบอย่างเป็นทางการเนื่องจากนี่เป็นจุดที่แท้จริงว่าทำไมการตั้งค่า @ daydreamer ของล้มเหลว
Valber

0

หากคุณได้ทำคำขอนั้นในแอปพลิเคชันของคุณแล้วและเห็นว่ามันถูกบันทึกไว้ใน Google Dev Tools คุณสามารถใช้คำสั่งคัดลอก cURL จากเมนูบริบทเมื่อคลิกขวาที่คำขอในแท็บเครือข่าย คัดลอก -> คัดลอกเป็น cURL มันจะมีส่วนหัวทั้งหมดคุกกี้ ฯลฯ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.