如何在请求中修改cookie

我在官方网站上找不到任何关于cookie修改文件,即没有关于requests.cookies.RequestsCookieJar的api文件.

例如,

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属性.

这样做的正确方法是什么?

解决方法

如您所见,您的cookie没有为其指定域名,因此它实际上是另一个cookie.

使用域和路径

session.cookies.set('NID','abc',domain='.google.co.uk',path='/')

将设置新的cookie而不是之前定义的cookie.

RequestCookieJar是cookielib.CookieJar的包装器,但如果你想就地修改cookie属性(以便引用实际的cookielib.Cookie对象),我发现没有比使用迭代器更好的方法了.

如果您查看requests.cookies.RequestsCookieJar的来源,则没有其他方法可以让您自己访问项目而不是其名称/值字段.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些