我正在访问一个创建带有值的cookie的网页,然后修改此值并访问同一网站上的另一个页面。
在python中使用librequests我得到了以下cookie:
s是使用s = requests.Session()
In [63]: s.cookies
Out[63]: <RequestsCookieJar[Cookie(version=0, name='my_cookie', value='normal_value', port=None, port_specified=False, domain='my_domain.lol', domain_specified=False, domain_initial_dot=False, path='/my_path', path_specified=False, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]>
我尝试了几件请求,首先:
[74]: s.cookies.set('my_cookie','new_value')
Out[74]: Cookie(version=0, name='my_cookie', value='new_value', port=None, port_specified=False, domain='/mydomain.lol', domain_specified=False, domain_initial_dot=False, path='/my_path', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)
但作为回报,我得到了
In [75]: s.cookies
Out[75]: <RequestsCookieJar[Cookie(version=0, name='my_cookie', value='new_value', port=None, port_specified=False, domain='/mydomain.lol', domain_specified=False, domain_initial_dot=False, path='/my_path', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False),
Cookie(version=0, name='my_cookie', value='new_value', port=None, port_specified=False, domain='mydomain.lol', domain_specified=False, domain_initial_dot=False, path='/my_path', path_specified=False, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]>
正如你所看到的,我的新值并没有替换旧的值,而是创建了一个新的cookie,使用了相同的结果:
s.cookies['my_cookie'] = 'new_value'
然后我尝试在设置我的cookie时指定尽可能多的东西,并且它有效:
In [67]: s.cookies.set('my_cookie','new_value',domain='mydomain.lol',path='/my_path')
Out[67]: Cookie(version=0, name='my_cookie', value='new_value', port=None, port_specified=False, domain='mydomain.lol', domain_specified=True, domain_initial_dot=False, path='/my_path', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)
In [68]: s.cookies
Out[68]: <RequestsCookieJar[Cookie(version=0, name='my_cookie', value='new_value', port=None, port_specified=False, domain='mydomain.lol', domain_specified=True, domain_initial_dot=False, path='/my_path', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False)]>
因此我的问题是,是否有更方便的方法来设置cookie而不指定这么多东西?例如,通过获取我的数组的第一个cookie?
答案 0 :(得分:2)
您可以先将值设置为无:
s.cookies.set('cookie', None)
s.cookies.set('cookie', "new_value")
一个例子:
In [5]: import requests
In [6]: with requests.Session() as s:
...: s.get('http://httpbin.org/cookies/set?c1=foo&c2=bar')
...: r = s.get('http://httpbin.org/cookies')
...: print(r.text)
...: s.cookies.set('c1', None)
...: s.cookies.set('c1', "foobar")
...: print(s.cookies)
...: r = s.get('http://httpbin.org/cookies')
...: print(r.text)
...:
{
"cookies": {
"c1": "foo",
"c2": "bar"
}
}
<<class 'requests.cookies.RequestsCookieJar'>[<Cookie c1=foobar for />, <Cookie c2=bar for httpbin.org/>]>
{
"cookies": {
"c1": "foobar",
"c2": "bar"
}
}