在Web开发中,Cookie是用于在客户端和服务器之间保存用户会话信息的重要机制。Python的Requests库为处理HTTP请求提供了强大且简单的方法,允许我们轻松地读取和设置Cookie。本文将详细介绍如何在Python中使用Requests库来处理Cookie。
读取 Cookie
在发送 HTTP 请求后,服务器可能会返回一些 Cookie,可以通过response.cookies
来获取这些 Cookie;
import requests
response = requests.get('http://google.com')
print(response.cookies)
response.cookies
返回一个RequestsCookieJar
对象实例;
遍历所有 Cookie:
for cookie in response.cookies:
print(f'{cookie.name}: {cookie.value}')
获取某个 Cookie,当 Cookie 不存在时会引发KeyError
:
print(response.cookies['AEC'])
print(response.cookies.get('AEC'))
设置 Cookie
在简单的场景下,如果你只需要传递一些基本的 Cookie 信息,可以直接使用字典来传递 Cookie;
import requests
url = "http://example.com"
cookies = {
'token': '123456'
}
response = requests.get(url, cookies=cookies)
在这个例子中,cookies
参数接收一个普通的字典,键是 cookie 的名称,值是对应 cookie 的值;这种方式非常简单,适合处理基本的 Cookie 场景,不能处理与 cookie 相关的属性(如:domain、path等)。
RequestsCookieJar 对象
除了存储基本的 cookie 键值对外,RequestsCookieJar
还能存储 cookie 的其它属性。比如,你可以为每个 cookie 指定其所属的域、路径、过期时间等,这些在复杂的 Web 请求场景中非常重要。
import requests
import time
jar = requests.cookies.RequestsCookieJar()
expires_time = int(time.time()) + 3600
jar.set('token', '123456', domain='example.com', path='/')
jar.set('token2', '123456', domain='example.com', path='/', expires=expires_time)
response = requests.get('https://example.com', cookies=jar)
更新 RequestsCookieJar
如需在多个请求之间共享 Cookies(例如在需要维持用户登录状态或其它会话信息的场景中),推荐使用会话(Session)对象。
更新服务器返回的 cookies:
import requests
jar = requests.cookies.RequestsCookieJar()
response = requests.post('https://example.com/login')
jar.update(response.cookies)
response = requests.get('https://example.com/do',cookies=jar)