python之requests模块-cookie

Posted 酌三巡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之requests模块-cookie相关的知识,希望对你有一定的参考价值。

cookie并不陌生,与session一样,能够让http请求前后保持状态。与session不同之处,在于cookie数据仅保存于客户端。requests也提供了相应到方法去处理cookie。

python之requests模块-session中,我们知道了requests中的session对象能够在请求之间保持cookie,它极大地方便了我们去使用cookie。当我们想设置方法级别中的请求时,可以如下面示例一样操作。

import requests

s = requests.session()
# 第一步:发送一个请求,用于设置请求中的cookies
cookies = dict(cookies_are=\'cookie1\')
# tips: http://httpbin.org能够用于测试http请求和响应
r1 = s.get(url=\'http://httpbin.org/cookies\', cookies=cookies)
print(r1.text)
# 第二步:发送一个请求,用于再次设置请求中的cookies
cookies = dict(cookies_are=\'cookie2\')
r2 = s.get(url=\'http://httpbin.org/cookies\', cookies=cookies)
print(r2.text)

运行结果

# r1.text
{
  "cookies": {
    "cookies_are": "cookie1"
  }
}
# t2.text
{
  "cookies": {
    "cookies_are": "cookie2"
  }
}

从结果中可以看出,该方法让cookie只作用了单个请求,因为方法级别的参数不会被跨请求保持,这是requests中session对象的机制,这里不再赘述。那么,如果我们想跨请求保持cookie呢?这里依旧可以应用session对象的跨请求机制,方法如下: 

import requests

s = requests.session()
s.cookies.update({\'cookies_are\': \'cookie\'})
r = s.get(url=\'http://httpbin.org/cookies\')
print(r.text)

值得一提的是,除了直接用字典去赋值cookie之外,requests还提供了RequestsCookieJar对象供我们使用,它的行为类似字典,但接口更为完整,适合跨域名跨路径使用。来看一个官方文档中的示例。

import requests

jar = requests.cookies.RequestsCookieJar()
jar.set(\'tasty_cookie\', \'yum\', domain=\'httpbin.org\', path=\'/cookies\')
jar.set(\'gross_cookie\', \'blech\', domain=\'httpbin.org\', path=\'/elsewhere\')
url = \'http://httpbin.org/cookies\'
r = requests.get(url, cookies=jar)
print(r.text)

运行结果

{
  "cookies": {
    "tasty_cookie": "yum"
  }
}

从结果中,可以看出我们利用RequestsCookieJar对象,达到了根据不同请求路径,发送不同cookie的效果,进一步增加了操作cookie的灵活性。

 

参考文档

 

以上是关于python之requests模块-cookie的主要内容,如果未能解决你的问题,请参考以下文章

爬虫学习 06.Python网络爬虫之requests模块

Python接口自动化之浅析requests模块get请求

Python接口自动化之浅析requests模块get请求

网络爬虫之requests模块

爬虫案例之网易有道翻译Python代码改写

python爬虫之requests库介绍