微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在请求中修改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的来源,则没有其他方法可以让您自己访问项目而不是其名称/值字段.

原文地址:https://www.jb51.cc/html/225546.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐