如何在请求中修改cookie

2024-09-27 09:32:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在官方网站上找不到任何关于cookies修改的文档,即没有用于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', port=None, port_specified=False, domain='.google.co.uk', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=False, expires=1471704399, discard=False, comment=None, comment_url=None, rest={}, rfc2109=False)]>

现在我想更改“NID”的值

如果我这样做session.cookies['NID'] = 'abc',它将以重复的键结束,如下所示:

<[Cookie(version=0, name='NID', value='abc', 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='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', port=None, port_specified=False, domain='.google.co.uk', domain_specified=True, domain_initial_dot=True, path='/', path_specified=True, secure=False, expires=1471704399, discard=False, comment=None, comment_url=None, rest={}, rfc2109=False)]>

我当前的方法是首先执行session.cookies['NID'] = None,这将删除键/值,然后session.cookies['NID'] = 'abc'这有时会起作用,但它完全忽略cookies属性。

做这件事的正确方法是什么?


Tags: pathnonefalsetrueportcookiesessiondomain
1条回答
网友
1楼 · 发布于 2024-09-27 09:32:06

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

使用域和路径

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

将设置新的cookie,而不是以前定义的cookie。

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

如果您查看requests.cookies.RequestsCookieJar的来源,则没有其他方法允许您访问项本身,而不是它们的name/value字段。

相关问题 更多 >

    热门问题