2011-01-13 13 views
11

मैं कुकी कैसे बना सकता हूं और इसे पाइथन में कुकीजर उदाहरण में जोड़ूं? मेरे पास कुकी (नाम, मूल्य, डोमेन, पथ, आदि) के लिए सभी जानकारी है और मैं http अनुरोध के साथ एक नई कुकी निकालना नहीं चाहता हूं।पायथन - cookiejar में कुकी जोड़ें

मैं इस कोशिश की, लेकिन ऐसा लगता है जैसे SimpleCookie वर्ग CookieJar साथ संगत नहीं है (? वहाँ एक और कुकी वर्ग है)

import Cookie 
c = Cookie.SimpleCookie() 
c["name"]="value" 
c['name']['expires'] = 0 
c['name']['path'] = "/" 
c['name']['domain'] = "mydomain.com" 
cj = cookielib.CookieJar() 
cj.set_cookie(cookie) 

Traceback (most recent call last): 
    cj.set_cookie(cookie) 
    File "/usr/lib/python2.6/cookielib.py", line 1627, in set_cookie 
    if cookie.domain not in c: c[cookie.domain] = {} 
AttributeError: 'SimpleCookie' object has no attribute 'domain' 
+1

आप जिस संदर्भ का उपयोग कर रहे हैं उसका क्या संदर्भ है? इस सामान को पाइथन वेब सेवारत और अनुरोध ढांचे में बहुत कुछ लागू किया गया है। सत्य के दौरान –

उत्तर

11

लग रहा है cookielib को देखते हुए, आपको मिलता है:

try: 
    from cookielib import Cookie, CookieJar   # Python 2 
except ImportError: 
    from http.cookiejar import Cookie, CookieJar # Python 3 
cj = CookieJar() 
# Cookie(version, name, value, port, port_specified, domain, 
# domain_specified, domain_initial_dot, path, path_specified, 
# secure, discard, comment, comment_url, rest) 
c = Cookie(None, 'asdf', None, '80', '80', 'www.foo.bar', 
     None, None, '/', None, False, False, 'TestCookie', None, None, None) 
cj.set_cookie(c) 
print cj 

देता है:

<cookielib.CookieJar[<Cookie asdf for www.foo.bar:80/>]> 

तत्काल पैरामीटर के लिए कोई वास्तविक सैनिटी चेक नहीं है। बंदरगाहों को तार नहीं होना चाहिए, int नहीं।

+0

, यह स्पर्श नहीं करता है कि 'कुकी' मॉड्यूल को 'cookielib' मॉड्यूल के साथ संगत किया जा सकता है या नहीं। – n611x007

+1

शायद आप उस मामले में अपना 'कुकी' प्रकार बनायेंगे, जो इंटरफेस दोनों प्रदान करता है। कुकीर वास्तव में एक कुकी के रूप में क्या प्राप्त करता है के बारे में picky नहीं है। नई कुकी को केवल 'डोमेन',' पथ' और 'नाम' विशेषताओं की आवश्यकता होती है और इसमें 'आइटम' नहीं होना चाहिए। यह मूल रूप से है। 'cookielib' internals वास्तव में कुछ हल्के व्याख्यान, पचाने में आसान और एक बहुत ही अनुशंसित पढ़ने हैं। – Michael

+0

मैंने अभी देखा - कुकी() 15 पैरामीटर लेता है, और आप इसे कॉल करते समय 16 आपूर्ति करते हैं। क्या यह एक टाइपो है? – reedog117

2

यहां महत्वपूर्ण बात यह है कि विधि cj.set_cookie वर्ग cookielib.Cookie की एक वस्तु की उम्मीद है इसके पैरामीटर के रूप में है, नहीं वर्ग Cookie.SimpleCookie की एक वस्तु (या किसी अन्य वर्ग मॉड्यूल में पाया (ताकि हाँ, वहाँ एक और कुकी वर्ग है) Cookie)। नामों की भ्रमित समानता के बावजूद ये वर्ग (जैसा कि देखा गया है) बस संगत नहीं हैं।

ध्यान दें कि cookielib.Cookie के लिए कन्स्ट्रक्टर की पैरामीटर सूची अतीत में किसी बिंदु पर बदल सकती है (और भविष्य में फिर से बदल सकता है क्योंकि इस वर्ग को cookielib के बाहर उपयोग करने की अपेक्षा नहीं की जा रही है), कम से कम help(cookielib.Cookie) वर्तमान में मुझे

# Cookie(version, name, value, port, port_specified, domain, 
# domain_specified, domain_initial_dot, path, path_specified, 
# secure, expires, discard, comment, comment_url, rest, rfc2109=False) 

नोट अतिरिक्त expires पैरामीटर और पैरामीटर rfc2109 थे, लेकिन नहीं @ माइकल के जवाब ऊपर में कोड में दर्ज देता है, तो उदाहरण के

c = Cookie(None, 'asdf', None, '80', True, 'www.foo.bar', 
    True, False, '/', True, False, '1370002304', False, 'TestCookie', None, None, False) 
की तरह कुछ हो जाना चाहिए

(लागू होने पर None के लिए कुछ बूलियन स्थिरांक को भी बदलना)।

+0

यदि ये दोनों असंगत हैं, तो कौन से मॉड्यूल क्रमशः उनमें से किसी का उपयोग कर रहे हैं? जैसे। किसी भी मानक-पुस्तकालय मॉड्यूल के साथ संगत 'कुकी' संगत है? 'cookielib' के बारे में क्या? एक दूसरे को क्यों इस्तेमाल करना चाहिए? – n611x007

संबंधित मुद्दे