पायथन अनुरोध पुस्तकालय के साथ पोस्ट अनुरोध में कुकीज़ कैसे भेजें?


94

मैं पोस्ट अनुरोध के साथ कुकीज़ भेजने के लिए अनुरोध पुस्तकालय का उपयोग करने की कोशिश कर रहा हूं , लेकिन मुझे यकीन नहीं है कि वास्तव में इसके प्रलेखन के आधार पर कुकीज़ कैसे सेट करें। यह स्क्रिप्ट विकिपीडिया पर उपयोग के लिए है, और कुकी को भेजने की आवश्यकता इस प्रकार है:

enwiki_session=17ab96bd8ffbe8ca58a78657a918558e; path=/; domain=.wikipedia.com; HttpOnly

हालाँकि, requestsप्रलेखन क्विकस्टार्ट इसे एकमात्र उदाहरण देता है:

cookies = dict(cookies_are='working')

मैं इस पुस्तकालय का उपयोग करके उपरोक्त की तरह कुकी को कैसे एन्कोड कर सकता हूं? क्या मुझे अजगर की मानक कुकी लाइब्रेरी के साथ इसे बनाने की आवश्यकता है, तो इसे POST अनुरोध के साथ भेजें?


2
आपकी कुकी में कई a=b;जोड़े हैं। एक अनुमान में, एक शब्दकोश में aकुंजी और bमूल्य के रूप में उपयोग करें ।
थॉमस के

जवाबों:


214

अनुरोधों की नवीनतम रिलीज़ आपके लिए सरल शब्दकोशों से कुकीज का निर्माण करेगी।

import requests

cookies = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}

r = requests.post('http://wikipedia.org', cookies=cookies)

का आनंद लें :)


क्या यह कोड मेरे ब्राउज़र में कुकी रखने वाला है? मैंने इसकी कोशिश की और यह मेरे काम नहीं आया।
क्रिस नीलसन

15
@ChrisNielsen के इस सवाल / जवाब का ब्राउज़र से कोई लेना-देना नहीं है
ThiefMaster

@ThiefMaster: आम तौर पर, कुकीज़ ब्राउज़रों में रहती हैं। यदि इस उत्तर का ब्राउज़र से कोई लेना-देना नहीं है, तो इसका क्या करना है?
क्रिस नीलसन

4
@ChrisNielsen: यह सवाल और जवाब में कोड एक पायथन अनुरोध में कुकी स्थापित करने के बारे में है। अनुरोध ब्राउज़र अनुरोध के समान कुछ करता है, लेकिन कोई ब्राउज़र शामिल नहीं है।
डीडीए

118

बस पिछले उत्तर पर विस्तार करने के लिए, यदि आप दो अनुरोधों को एक साथ जोड़ रहे हैं और पहले एक से दूसरे (एक उदाहरण के लिए सत्र को बनाए रखने के लिए, आप कर सकते हैं) से लौटी हुई कुकीज़ भेजना चाहते हैं:

import requests
r1 = requests.post('http://www.yourapp.com/login')
r2 = requests.post('http://www.yourapp.com/somepage',cookies=r1.cookies)

54
इसके अतिरिक्त, आप requests.sessionइस सटीक चीज़ के लिए उपयोग कर सकते हैं , कई सत्रों में कुकीज़ का भंडारण, sessionबदले ऑब्जेक्ट से कॉल कर सकते हैं ।
टैंकरस्मैश

7
मुझे कई बार सत्र का उपयोग करते समय भी इसका उपयोग करना पड़ा है। सत्र कुछ स्थितियों में सेट-कुकी हेडर को याद करने लगता है।
kervin

1
@ कर्विन यह मेरे साथ भी हुआ। अनुरोधों में बग जैसा लगता है, क्योंकि सत्र को संभालना चाहिए
डेविडेब

3
@TankorSmash निश्चित रूप से एक बग है, मेरी कुकीज़ का उपयोग आगे नहीं किया जाता हैrequest.session
Tjorriemorrie

क्या सत्र में (मिस्ड) कुकी सेट करने का यह सबसे अच्छा तरीका है? stackoverflow.com/a/17240616/143397
davidA

0

यदि आप कुकी को ब्राउज़र में पास करना चाहते हैं, तो आपको हेडर को वापस भेजना होगा। यदि आप wsgi का उपयोग कर रहे हैं:

import requests
...


def application(environ, start_response):
    cookie = {'enwiki_session': '17ab96bd8ffbe8ca58a78657a918558'}
    response_headers = [('Content-type', 'text/plain')]
    response_headers.append(('Set-Cookie',cookie))
...

    return [bytes(post_env),response_headers]

मैं सफलतापूर्वक उसी डोमेन पर होस्ट किए गए Bugzilla और TWiki के साथ प्रमाणित करने में सक्षम हूं, जो मेरी पायथन wsgi स्क्रिप्ट में है, जो मेरे उपयोगकर्ता स्क्रिप्ट पर पासवर्ड / पासवर्ड पास करके और कुकीज़ को ब्राउज़र में पास करके चल रहा है। यह मुझे एक ही ब्राउज़र में Bugzilla और TWiki पृष्ठ खोलने और प्रमाणित करने की अनुमति देता है। मैं सुइटसीआरएम के साथ भी ऐसा ही करने की कोशिश कर रहा हूं, लेकिन मुझे सूटसीआरएम के साथ सत्र कुकीज़ को स्वीकार करने में परेशानी हो रही है, भले ही यह सफलतापूर्वक प्रमाणित हो गया हो।

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