在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)