Python请求修改现有cookie值的正确方法是什么?

Python请求修改现有cookie值的正确方法是什么?,python,http,cookies,python-requests,Python,Http,Cookies,Python Requests,我正在访问一个网页,该网页创建了一个具有值的cookie,然后修改该值并从同一网站访问另一个网页。 在python中使用librequests,我得到了以下cookie: s是使用s=requests.session()打开的会话 但作为回报,我得到了 In [75]: s.cookies Out[75]: <RequestsCookieJar[Cookie(version=0, name='my_cookie', value='new_value', port=None, port_sp

我正在访问一个网页,该网页创建了一个具有值的cookie,然后修改该值并从同一网站访问另一个网页。 在python中使用librequests,我得到了以下cookie: s是使用
s=requests.session()打开的会话

但作为回报,我得到了

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时,我尝试指定尽可能多的内容,结果成功了:

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)]>
[67]中的
:s.cookies.set('my\u cookie','new\u value',domain='mydomain.lol',path='/my\u path')
Out[67]:Cookie(version=0,name='my'u Cookie',value='new'u value',port=None,port\u specified=False,domain='mydomain.lol',domain\u specified=True,domain\u initial\u dot=False,path='/my\u path',path\u specified=True,secure=False,expires=None,discard=True,comment=None,comment\u url=None,rest={'HttpOnly':None,rfc2109=False)
在[68]中:s
出[68]:

因此,我的问题是,有没有一种更方便的方法来设置cookie,而不必指定这么多东西?例如,通过获取my array的第一个cookie?

可以首先将值设置为None:

  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"
  }
}
[5]中的
:导入请求
在[6]中:将requests.Session()作为s:
…:s.get()http://httpbin.org/cookies/set?c1=foo&c2=bar')
…:r=s.get('http://httpbin.org/cookies')
…:打印(右文本)
…:s.cookies.set('c1',无)
…:s.cookies.set('c1',“foobar”)
…:打印(s.cookies)
…:r=s.get('http://httpbin.org/cookies')
…:打印(右文本)
...:     
{
“饼干”:{
“c1”:“foo”,
“c2”:“巴”
}
}
{
“饼干”:{
“c1”:“foobar”,
“c2”:“巴”
}
}

代码格式看起来不太好,有没有改进的方法?但这会使其他值与我访问网页时给出的值保持一致吗?@user3714670,您尝试过吗?不幸的是,您必须以这种方式清除以前的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)]>
  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"
  }
}