例如,
session = requests.Session() a = session.head('http://www.google.co.uk') session.cookies
<[Cookie(version=0,
name=’NID’,
value=’67=CXdvwjj9sjd-13Y0VyRQyUs8PxXaxyMhiGrrozXP7RWSjf-5alV4D17ORcfnZNYLAmlHXSVlHuS5LcuE4-v6vnzRQS-Gt72hgbGye0apoBoW5KJeVXA2o2E0gE-8jIeY’,
port=None,port_specified=False,domain=’.google.co.uk’,
domain_specified=True,domain_initial_dot=True,path=’/’,
path_specified=True,secure=False,expires=1424443599,discard=False,
comment=None,comment_url=None,rest={‘HttpOnly’: None},
rfc2109=False),Cookie(version=0,name=’PREF’,
value=’ID=41c5d5cac7d22262:FF=0:TM=1408632399:LM=1408632399:S=wTfY_LkkZnSsBxoL’,expires=1471704399,rest={},rfc2109=False)]>
现在我想改变’NID’的值
如果我做session.cookies [‘NID’] =’abc’,它最终会出现重复的密钥,如下所示:
<[Cookie(version=0,value=’abc’,port=None,domain=”,
domain_specified=False,domain_initial_dot=False,expires=None,discard=True,name=’NID’,rfc2109=False)]>
我当前的方法是先session.cookies [‘NID’] = None,这会删除键/值,然后session.cookies [‘NID’] =’abc’这有时会起作用,但它完全忽略了cookies属性.
这样做的正确方法是什么?
解决方法
使用域和路径
session.cookies.set('NID','abc',domain='.google.co.uk',path='/')
将设置新的cookie而不是之前定义的cookie.
RequestCookieJar是cookielib.CookieJar的包装器,但如果你想就地修改cookie属性(以便引用实际的cookielib.Cookie对象),我发现没有比使用迭代器更好的方法了.
如果您查看requests.cookies.RequestsCookieJar的来源,则没有其他方法可以让您自己访问项目而不是其名称/值字段.