Cookies 如何在python请求库中将cookie添加到cookiejar

Cookies 如何在python请求库中将cookie添加到cookiejar,cookies,python-3.x,session-cookies,python-requests,Cookies,Python 3.x,Session Cookies,Python Requests,我试图使用python requests 1.2.3库向现有cookiejar添加cookie。每次我添加新的cookie时,jar中的数据都会被屏蔽以获得新的cookie。缺少键、缺少值或与不正确的键匹配。我不确定这是请求库错误还是我没有正确发送cookie。我使用下面的代码导致cookiejar中出现错误的cookie。我是否正确格式化了cookie?有什么想法吗 my_cookie = { 'domain':'www.mydomain.com',

我试图使用python requests 1.2.3库向现有cookiejar添加cookie。每次我添加新的cookie时,jar中的数据都会被屏蔽以获得新的cookie。缺少键、缺少值或与不正确的键匹配。我不确定这是请求库错误还是我没有正确发送cookie。我使用下面的代码导致cookiejar中出现错误的cookie。我是否正确格式化了cookie?有什么想法吗

    my_cookie = {
           'domain':'www.mydomain.com',
           'expires':None,
           'name':'COOKIE_NAME',
           'path':'/',
           'value':'the cookie works',
           'version':0
}

s = requests.Session()
requests.utils.add_dict_to_cookiejar(s.cookies, my_cookie)

我通过导入CookieJar、Cookie和Cookie找到了一种方法。在@Lukasa的帮助下,他向我展示了一个更好的方法。然而,以他的方式,我无法指定“指定端口”、“指定域”、“指定域初始点”或“指定路径”属性。“set”方法使用默认值自动执行此操作。我试图抓取一个网站,他们的cookie在这些属性中有不同的值。由于我对这一切都不熟悉,我不确定这是否真的很重要

my_cookie = {
"version":0,
"name":'COOKIE_NAME',
"value":'true',
"port":None,
# "port_specified":False,
"domain":'www.mydomain.com',
# "domain_specified":False,
# "domain_initial_dot":False,
"path":'/',
# "path_specified":True,
"secure":False,
"expires":None,
"discard":True,
"comment":None,
"comment_url":None,
"rest":{},
"rfc2109":False
}

s = requests.Session()
s.cookies.set(**my_cookie)
快速回答 选择1 选择2 详细答案 我不知道当最初的问题被问到时,这种技术是否有效,但理想情况下,您可以使用
requests.cookies.create_cookie(name,value,**kwargs)
生成自己的cookie对象,然后通过
requests.cookies.requestScookejar.set_cookie(cookie,*args,**kwargs)
将其添加到cookie jar中。请参阅源代码/文档

向会话请求添加自定义cookie 导入请求 >>>s=请求。会话() >>>印刷品(s.cookies) >>>所需参数={ 'name':'COOKIE_name', “值”:“cookie有效” } >>>可选参数={ “版本”:0, “端口”:无, #注意:如果域为空字符串或未提供,则会创建 #提供给所有域的“超级cookie”。 “域”:“example.com”, “路径”:“/”, “安全”:错误, “过期”:无, "弃":对,, “评论”:无, “注释url”:无, 'rest':{'HttpOnly':无}, “rfc2109”:错误 } >>>my_cookie=requests.cookies.create_cookie(**必需的_参数,**可选的_参数) #与直觉相反,set_cookie将cookie添加到会话对象中, #将现有cookie保持在适当的位置 >>>s.cookies.set_cookie(我的_cookie) >>>美国饼干 奖励:让我们添加一个超级cookie,然后删除它
>>my_super_cookie=请求.cookies.创建_cookie('super','cookie'))
>>>s.cookies.set_cookie(我的超级饼干)
#注意,我们有以前的cookie和新cookie
>>>美国饼干
#删除很简单,请注意,这会根据名称删除cookie,
#如果您有多个同名Cookie,它将引发
#requests.cookies.CookieConflictError
>>>del s.cookies['super']
>>>美国饼干

要使用内置函数和方法

import requests

session = requests.session()
my_cookies = {'cookie_key': 'cookie_value',
              'another_cookie_key': 'another_cookie_value'}
requests.utils.add_dict_to_cookiejar(session.cookies, my_cookies)
您可以根据需要添加任意数量的cookies。如果需要特殊标题,请使用此方法添加它们

my_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0'}
session.headers.update(my_headers)

您可能应该在
上拆分
,然后
=
上拆分之前去除
空白。另外,一个解释也很好。如果cookie值中有“=”符号,这也会失败,如果该值已被base64编码,则可能会出现这种情况。我意识到这并不好,也意味着导入
re
,但这对我来说很有效:
cj=requests.utils.cookiejar_from_dict(dict(re.match(r'^([^=]+)=(.+)$,p.strip()).groups()用于普通的cookie.split(';)
我不明白,为什么这没有记录在请求库文档中?这么简单的一个案例,我不得不在这里搜索。文档总是使用一个更复杂的例子。我也不确定。。。这也是我身上的一根刺,所以我自己努力去解剖它。很高兴你发现它很有用!注意:它是
请求.cookies.create\u cookie
,而不是
会话.cookies.create\u cookie
。我犯了这个错误并得到了一个错误:“requestScookejar”对象没有属性“create\u cookie”。另外请注意,您链接的文档页面似乎显示了一个更简洁的
session.cookies.set(“cookie\u NAME”,“cookie有效”,domain=“example.com”)
。将其与一个[隐藏]代理和一个标题混合使用,它非常适合请求。
import requests
s = requests.session()
# Note that domain keyword parameter is the only optional parameter here
cookie_obj = requests.cookies.create_cookie(domain="example.com",name="COOKIE_NAME",value="the cookie works")
s.cookies.set_cookie(cookie_obj)
>>> import requests
>>> s = requests.session()
>>> print(s.cookies)
<RequestsCookieJar[]>
>>> required_args = {
        'name':'COOKIE_NAME',
        'value':'the cookie works'
    }
>>> optional_args = {
    'version':0,
    'port':None,
#NOTE: If domain is a blank string or not supplied this creates a
# "super cookie" that is supplied to all domains.
    'domain':'example.com',
    'path':'/',
    'secure':False,
    'expires':None,
    'discard':True,
    'comment':None,
    'comment_url':None,
    'rest':{'HttpOnly': None},
    'rfc2109':False
}
>>> my_cookie = requests.cookies.create_cookie(**required_args,**optional_args)
# Counter-intuitively, set_cookie _adds_ the cookie to your session object,
#  keeping existing cookies in place
>>> s.cookies.set_cookie(my_cookie)
>>> s.cookies
<RequestsCookieJar[Cookie(version=0, name='COOKIE_NAME', value='the cookie works', port=None, port_specified=False, domain='www.domain.com', domain_specified=True, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
>>> my_super_cookie = requests.cookies.create_cookie('super','cookie')
>>> s.cookies.set_cookie(my_super_cookie)
# Note we have both our previous cookie and our new cookie
>>> s.cookies
<RequestsCookieJar[Cookie(version=0, name='super', value='cookie', port=None, port_specified=False, domain='', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False), Cookie(version=0, name='COOKIE_NAME', value='the cookie works', port=None, port_specified=False, domain='www.domain.com', domain_specified=True, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
# Deleting is simple, note that this deletes the cookie based on the name,
# if you have multiple cookies with the same name it will raise
# requests.cookies.CookieConflictError
>>> del s.cookies['super']
>>> s.cookies
<RequestsCookieJar[Cookie(version=0, name='COOKIE_NAME', value='the cookie works', port=None, port_specified=False, domain='www.domain.com', domain_specified=True, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
import requests

session = requests.session()
my_cookies = {'cookie_key': 'cookie_value',
              'another_cookie_key': 'another_cookie_value'}
requests.utils.add_dict_to_cookiejar(session.cookies, my_cookies)
my_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0'}
session.headers.update(my_headers)