? Почему один хочет использовать один над другим?

не создать cookie и добавить его в экземпляр CookieJar в python? У меня есть вся информация о файле cookie (имя, значение, домен, путь и т. Д.), И я не хочу извлекать новый файл cookie с помощью запроса http.

Я пробовал это, но похоже, что класс SimpleCookie не совместим с CookieJar (есть ли другой класс Cookie?)

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'
 Jonathan Vanasco01 окт. 2012 г., 23:37
В каком контексте вы это используете? Этот материал был многократно реализован в веб-сервисах Python и средах запросов.

Ответы на вопрос(2)

Глядя на 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.

 Michael17 дек. 2013 г., 20:03
Вероятно, вы бы просто создать свой собственныйCookie введите в этом случае, который предлагает оба интерфейса. Cookiejar не очень требователен к тому, что он получает как печенье. Новое печенье просто требуетdomain, path а такжеname атрибуты и не должны иметьitems, Вот и все в принципе.cookielib внутренняя часть - это действительно лёгкая лекция, легко усваиваемая и очень рекомендуемая для чтения.
 reedog11727 июл. 2017 г., 20:48
Я только что заметил - Cookie () принимает 15 параметров, а вы предоставляете 16 при вызове. Это опечатка?
 Michael14 авг. 2017 г., 19:34
Полагаю, 16-го числа был этот необязательный параметр rfc2109.
 n611x00703 нояб. 2013 г., 20:17
в то время как правда, это не касается лиCookie модуль может быть сделан совместимым сcookielib модуль или нет.

cj.set_cookie ожидает объект классаcookielib.Cookie как его параметр (такда, есть еще один класс 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 используется, но не документировано в коде ответа @ Michael выше, поэтому пример должен выглядеть примерно так:

c = Cookie(None, 'asdf', None, '80', True, 'www.foo.bar', 
   True, False, '/', True, False, '1370002304', False, 'TestCookie', None, None, False)

(также заменяет некоторые логические константы дляNone где применимо).

 n611x00703 нояб. 2013 г., 20:21
если эти два несовместимы, какие модули используют один из них соответственно? например. являетсяCookie совместим с любым модулем стандартной библиотеки? что оcookielib? Почему один хочет использовать один над другим?

Ваш ответ на вопрос