कुकीज़ भेजने के लिए cURL का उपयोग कैसे करें?


296

मैंने पढ़ा कि कर्ल कार्यों के साथ कुकीज़ भेजें , लेकिन मेरे लिए नहीं।

मेरे पास एक 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आउटपुट कुकी जार के रूप में आपकी कुकी फ़ाइल का उपयोग करने के लिए कहता है, जो कि आप नहीं चाहते हैं।
ब्लेंडर

के साथ एक -bविकल्प अकेले भी काम नहीं कर रहा, वही त्रुटि दे रही है :(
सपना देखनेवाला

-bकुकी फ़ाइल का प्रारूप केवल नहीं है var=value, यह कुकी जार के प्रारूप के समान होना चाहिए -c। एक साइट पर जाएं जो इस विकल्प के साथ कुकीज़ भेजता है, और परिणामी फ़ाइल पर एक नज़र डालें।
बमर

-B कुकी_फाइल या तो नेटस्केप / मोज़िला प्रारूप या सादे HTTP हेडर में होना चाहिए। यहाँ सादे http हेडर का एक उदाहरण दिया गया है: सेट-कुकी: कुकी_नाम = कुकी_वेल्यू; यह नंगे न्यूनतम है। अंत में अर्धविराम को न भूलें।
एलेक्स

जवाबों:


492

यह मेरे लिए काम किया:

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

मैं बैकएंड का उपयोग करके मूल्य देख सकता था

print request.cookies

17
जब तक आप कभी नहीं, कभी एक कुकी के रूप में एक उपयोगकर्ता टोकन के लिए एक बूलियन है, यह देखते हुए कि वे सिर्फ उस तरह से लॉग इन किए बिना खुद को प्रमाणित कर सकते हैं।
matts1

15
मैन पेज के अनुसार, विकल्प के लिए -b, --cookie, उदाहरण के लिए curl -b <file-or-pairs>, यदि तर्क एक स्ट्रिंग है जिसमें '='प्रतीक है, तो इसे पारित कर दिया गया है, अन्यथा इसे कुकी से पढ़ने के लिए फ़ाइल नाम के रूप में माना जाता है।
रेयनस

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ध्वज क्या के बीच आवश्यक diff है -cऔर -bवे दोनों एक कुकी फाइल करने के लिए इंजन और बिंदु शुरू?
nhed

4
@ कुकी कुकी फ़ाइल को -c लिखती है, -bउससे पढ़ती है। इसलिए जब आप एक लॉगिन फ़ॉर्म के लिए क्रेडेंशियल भेजते हैं -c, तो आप परिणामस्वरूप कुकी को एक फ़ाइल में लिखना चाहेंगे, तब आप -bअपने अगले अनुरोध में कुकी को पढ़ने और शामिल करने का उपयोग करेंगे ।
मैडब्रेक्स

26
या उसी कुकी स्टोर में curl -b cookiefile -c cookiefile https://yourhost/पढ़ने और लिखने के लिए करते हैं जैसे ब्राउज़र करते हैं।
LinuxDisciple

38

आप अपनी कुकी फ़ाइल में एक गलत प्रारूप का उपयोग कर रहे हैं। जैसा कि कर्ल डॉक्यूमेंटेशन कहता है, यह एक पुराने नेटस्केप कुकी फ़ाइल प्रारूप का उपयोग करता है, जो वेब ब्राउज़र द्वारा उपयोग किए जाने वाले प्रारूप से भिन्न होता है। यदि आपको मैन्युअल रूप से कर्ल कुकी फ़ाइल बनाने की आवश्यकता है, तो इस पोस्ट को आपकी मदद करनी चाहिए। आपके उदाहरण में फ़ाइल में निम्न पंक्ति होनी चाहिए

127.0.0.1   FALSE   /   FALSE   0   USER_TOKEN  in

7 TAB- अलग-अलग फ़ील्ड्स का अर्थ है डोमेन , टेलमैच , पाथ , सिक्योर , एक्सपायर , नाम , मान


2
हां, यह cURL कुकी प्रारूप है। ये TABS हैं न कि SPACES।
m3nda

4
इसे आधिकारिक उत्तर के रूप में चिह्नित किया जाना चाहिए, क्योंकि यह सही मायने में इस बिंदु को संबोधित करता है कि क्यों @ daydreamer का सेटअप विफल हो रहा था।
वलबर

0

यदि आपने अपने एप्लिकेशन में वह अनुरोध पहले ही कर दिया है, और उसे Google देव उपकरण में लॉग इन करके देख सकते हैं, तो नेटवर्क टैब में अनुरोध पर राइट क्लिक करने पर आप संदर्भ मेनू से कॉपी cURL कमांड का उपयोग कर सकते हैं। कॉपी -> cURL के रूप में कॉपी करें। इसमें सभी हेडर, कुकीज आदि शामिल होंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.