2011-01-13 20 views
11

クッキーを作成し、それをPythonのCookieJarインスタンスに追加するにはどうすればよいですか? cookie(名前、値、ドメイン、パスなど)の情報がすべてあり、httpリクエストで新しいCookieを抽出したくありません。python - クッキーをクッキージャーに追加する

(別のCookieクラスがあるのでしょうか?)私はこれを試してみましたが、の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

これを使用しているコンテキストは何ですか?このものは、PythonのWebサービスとリクエストフレームワークで多く実装されています。 –

答えて

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

Trueの場合、これは 'Cookie'モジュールが' cookielib'モジュールと互換性があるかどうかには影響しません。 – n611x007

+1

おそらく、両方のインタフェースを提供する独自の 'Cookie'型を作成するだけでしょう。クッキージャーは、クッキーとして得られるものを本当に嫌うものではありません。新しいクッキーは単に 'domain'、' path'と 'name'属性を必要とし、' items'を持ってはいけません。基本的にそれです。 'cookielib'内部は、実際には軽量な講義で、消化しやすく、とてもお勧めです。 – Michael

+0

私はちょうど気づいた - Cookie()は15のパラメータを取り、それを呼び出すときに16を指定します。これはタイプミスですか? – reedog117

2

ここで重要な点は、そのパラメータとして、クラスcookielib.Cookieのオブジェクトを期待cj.set_cookieその方法でモジュールに見出さ、ないクラスCookie.SimpleCookieのオブジェクト(または他の任意のクラス(SO はい、別のクッキークラスあります) 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

これらの2つが互換性がない場合、どちらのモジュールがどちらを使用していますか?例えば。 'Cookie'は標準ライブラリモジュールと互換性がありますか? 'cookielib'はどうですか?なぜ、他のものを使いたいのですか? – n611x007

関連する問題