pin_drop当前位置:知识文库 ❯ 图文

requests Cookie处理教程 - 发送接收会话管理详解

一、Cookie处理概述

Cookie是服务器发送到客户端并存储在本地的小段数据,用于在后续请求中标识用户身份和状态。requests库提供了灵活的Cookie处理机制:可以通过cookies参数发送Cookie,通过response.cookies获取服务器设置的Cookie,通过Session自动管理Cookie生命周期。

在Web爬虫、登录态保持和API测试中,Cookie管理是核心技能。理解Cookie的传递机制和生命周期管理,对于模拟真实用户行为至关重要。

二、Cookie语法与参数

requests提供多种方式处理Cookie,从简单的字典传参到精细的CookieJar控制。

代码示例

# 发送Cookie
requests.get(url, cookies=dict)

# 获取响应Cookie
response.cookies

# Session自动管理Cookie
session = requests.Session()
session.cookies

参数说明

参数/属性 类型 说明
cookies dict/CookieJar 请求携带的Cookie
response.cookies RequestsCookieJar 服务器返回的Cookie
session.cookies RequestsCookieJar Session维护的Cookie

RequestsCookieJar常用方法

方法 说明
get(name) 获取指定名称的Cookie值
set(name, value) 设置Cookie
items() 获取所有Cookie的键值对
keys() 获取所有Cookie名称
clear() 清除所有Cookie
update(other) 合并其他CookieJar

三、发送和接收Cookie

最基本的Cookie操作是通过cookies参数发送Cookie到服务器,以及从响应中获取服务器设置的Cookie。

代码示例

import requests

# 发送Cookie
cookies = {'session_id': 'abc123', 'user_pref': 'dark_mode'}
response = requests.get('https://httpbin.org/cookies', cookies=cookies)
print(f"服务器收到Cookie: {response.json()['cookies']}")

# 获取服务器设置的Cookie
response2 = requests.get('https://httpbin.org/cookies/set?token=xyz789&theme=light')
print(f"服务器设置Cookie: {dict(response2.cookies)}")

输出结果:

代码示例

服务器收到Cookie: {'session_id': 'abc123', 'user_pref': 'dark_mode'}
服务器设置Cookie: {'token': 'xyz789', 'theme': 'light'}

四、Session自动管理Cookie

当需要跨请求保持Cookie时,必须使用Session对象。Session会自动维护CookieJar,在后续请求中自动携带之前服务器设置的Cookie。

代码示例

import requests

session = requests.Session()

# 第一步:服务器设置Cookie
session.get('https://httpbin.org/cookies/set?login=true&user_id=10086')
print(f"登录后Cookie: {dict(session.cookies)}")

# 第二步:后续请求自动携带Cookie
response = session.get('https://httpbin.org/cookies')
print(f"自动携带Cookie: {response.json()['cookies']}")

# 第三步:手动添加Cookie
session.cookies.set('custom_token', 'my_token_value')
response2 = session.get('https://httpbin.org/cookies')
print(f"添加自定义Cookie后: {response2.json()['cookies']}")

# 清除Cookie
session.cookies.clear()
response3 = session.get('https://httpbin.org/cookies')
print(f"清除Cookie后: {response3.json()['cookies']}")

session.close()

输出结果:

代码示例

登录后Cookie: {'login': 'true', 'user_id': '10086'}
自动携带Cookie: {'login': 'true', 'user_id': '10086'}
添加自定义Cookie后: {'login': 'true', 'user_id': '10086', 'custom_token': 'my_token_value'}
清除Cookie后: {}

五、Cookie与CookieJar互转

RequestsCookieJar支持设置Cookie的domain、path等属性,比普通字典更加灵活。在某些场景下需要在字典和CookieJar之间进行转换。

代码示例

import requests
from http.cookiejar import CookieJar

# 字典转CookieJar
jar = requests.cookies.RequestsCookieJar()
jar.set('cookie_a', 'value_a', domain='httpbin.org', path='/')
jar.set('cookie_b', 'value_b', domain='httpbin.org', path='/')

response = requests.get('https://httpbin.org/cookies', cookies=jar)
print(f"CookieJar发送: {response.json()['cookies']}")

# CookieJar转字典
cookie_dict = dict(jar)
print(f"转为字典: {cookie_dict}")

# 遍历CookieJar
print("遍历Cookie:")
for name, value in jar.items():
    print(f"  {name} = {value}")

输出结果:

代码示例

CookieJar发送: {'cookie_a': 'value_a', 'cookie_b': 'value_b'}
转为字典: {'cookie_a': 'value_a', 'cookie_b': 'value_b'}
遍历Cookie:
  cookie_a = value_a
  cookie_b = value_b

六、Cookie应用场景

  • 模拟登录:模拟登录后保持会话,Session自动管理登录Cookie

  • 爬虫绕过验证:携带Cookie绕过登录验证,访问需要认证的页面

  • API测试:验证服务器是否正确设置和读取Cookie


安全提示:直接使用requests.get()的cookies参数发送Cookie,不会自动保持服务端返回的Cookie。需要跨请求保持Cookie时,必须使用Session对象。Cookie中可能包含敏感信息(如session_id),需注意安全存储和传输。

七、Cookie管理方式对比

方式 Cookie保持 适用场景 复杂度
cookies参数 不保持 单次请求携带Cookie 简单
Session.cookies 自动保持 登录态、多步骤操作 中等
手动CookieJar 手动管理 需要精细控制Cookie属性 复杂

八、常见问题

为什么使用cookies参数发送的Cookie不会自动保存?

requests.get(url, cookies=dict)只在当前请求中发送Cookie,不会维护Cookie状态。需要跨请求保持Cookie时,必须使用Session对象。

如何查看Session中当前保存的所有Cookie?

使用dict(session.cookies)可以将Session的CookieJar转换为字典查看,或使用session.cookies.items()遍历。

如何删除Session中的某个特定Cookie?

使用session.cookies.clear()清除所有Cookie,或者使用session.cookies.set(name, None)将特定Cookie设为空值来删除。

Cookie的domain和path属性有什么作用?

domain属性指定Cookie作用域,只有访问匹配的域名时才会发送;path属性指定Cookie的URL路径限制。通过CookieJar的set方法可以精确设置这两个属性,实现更细粒度的Cookie控制。

标签: requests Cookie处理 Session管理 CookieJar 登录态保持 Python爬虫

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: requests认证Auth教程 - Basic/Digest/自定义认证详解 下一篇: requests文件上传下载教程 - 流式下载与files参数详解

poll相关推荐