Python基础入门 Day106 网络编程之使用requests处理Cookies与会话

56次阅读
没有评论

共计 3049 个字符,预计需要花费 8 分钟才能阅读完成。

在上一节中,我们学习了使用 requests 模块发起各种 HTTP 请求的方法。但在实际开发中,我们经常会遇到需要保持登录状态、携带 Cookies 或跨多个请求共享会话的情况。例如:访问一个需要登录的网站时,第一次请求登录接口,后续的请求就要带上登录后的身份信息(即 Cookies)。

本节我们将深入学习如何使用 requests 模块来处理 Cookies 和会话(Session),掌握如何实现“登录后操作”的常见网络编程场景。

一、什么是 Cookies
Cookies 是服务器发送给客户端的一小段数据,通常用来记录用户的登录状态、偏好设置等。当你登录某个网站后,服务器会在响应中返回一组 Cookies,浏览器(或程序)在之后的请求中会自动携带这些 Cookies,以表明“我已经登录”。

Python 的 requests 模块提供了简单的接口来读取、设置和保持 Cookies。

二、查看响应中的 Cookies
我们可以通过 response.cookies 来查看服务器返回的 Cookies。

import requests

response = requests.get("https://httpbin.org/cookies/set?user=python&level=beginner")
print(" 状态码:", response.status_code)
print(" 服务器返回的 Cookies:", response.cookies)

# 将 Cookies 转为字典形式查看内容
print("Cookies 字典:", response.cookies.get_dict())

https://httpbin.org 是一个提供测试 HTTP 请求的站点,方便我们实验。

三、在请求中携带 Cookies
如果我们已经有 Cookies(例如从浏览器中复制下来的),可以在请求时手动添加:

cookies = {"user": "python_learner", "auth": "token123"}
response = requests.get("https://httpbin.org/cookies", cookies=cookies)

print(" 请求的 Cookies:", cookies)
print(" 服务器返回:", response.json())

requests 会自动在请求头中添加 Cookie 字段。

四、使用 Session 对象保持会话
在真实的应用中,我们往往需要跨多个请求保持同一个会话(即自动管理 Cookies)。
这时就需要用到 requests.Session()

import requests

# 创建 Session 对象
session = requests.Session()

# 第一次请求:设置 Cookie
session.get("https://httpbin.org/cookies/set/sessioncookie/123456")

# 第二次请求:自动携带上次的 Cookie
response = session.get("https://httpbin.org/cookies")

print(" 保持会话后的 Cookies:", response.json())

Session 对象会在多次请求中自动保存和携带 Cookies,非常适合模拟登录。

五、模拟登录场景示例
下面我们模拟一个典型的登录操作过程:

  1. 向登录接口发送用户名和密码;
  2. 服务器返回 Cookies 表示登录成功;
  3. 之后访问用户信息页时自动带上 Cookies。
import requests

login_url = "https://httpbin.org/post"
profile_url = "https://httpbin.org/cookies"

# 创建 Session
session = requests.Session()

# 模拟登录
payload = {"username": "admin", "password": "123456"}
response = session.post(login_url, data=payload)
print(" 登录响应:", response.json())

# 访问需要登录的页面
session.cookies.set("auth_token", "abc123")  # 模拟登录后的 cookie
profile_response = session.get(profile_url)
print(" 用户信息页面返回:", profile_response.json())

在实际网站中,这个流程和思路相同,只是登录接口和字段不同。

六、保存与加载 Cookies
有时我们希望将 Cookies 保存下来,下次使用时直接加载。可以用 requests.utils 来处理。

import requests
import pickle

session = requests.Session()
session.get("https://httpbin.org/cookies/set/user/python")

# 保存 Cookies 到文件
with open("cookies.pkl", "wb") as f:
    pickle.dump(session.cookies, f)

# 读取 Cookies 并重新加载
new_session = requests.Session()
with open("cookies.pkl", "rb") as f:
    new_session.cookies.update(pickle.load(f))

response = new_session.get("https://httpbin.org/cookies")
print(" 重新加载 Cookies 后的结果:", response.json())

这种方法常用于脚本自动化登录,避免重复登录操作。

七、删除 Cookies
如果你需要清除某个 Cookie,可以通过如下方式:

session.cookies.clear(domain=None, path=None, name=None)

也可以指定某个 Cookie 名清除:

session.cookies.clear(name="auth_token")

八、常见问题与调试技巧

  1. 某些网站的 Cookies 会带有过期时间、路径、HttpOnly 等属性,这些都由服务器控制,客户端无法修改。
  2. 若请求失败,可以通过 response.history 查看是否有重定向;也可打印 response.request.headers 查看实际发送的请求头。
  3. 如果网站需要登录令牌(token),除了 Cookies 外,还需在请求头中加入 Authorization

九、实战练习

  1. 使用 requests.Session() 模拟登录某个公开测试网站(如 https://reqres.in/)。
  2. 尝试保存 Cookies 并重新加载,实现“免登录访问”。
  3. 编写一个简单的“登录检测脚本”,在登录过期时自动重新登录。

十、小结
本节内容主要学习了 requests 模块的高级用法——Cookies 与会话保持。
重点掌握以下几点:

  1. response.cookies 获取服务器返回的 Cookies;
  2. 通过 cookies 参数手动传递 Cookies;
  3. 使用 requests.Session() 实现多次请求间的状态保持;
  4. 使用 pickle 保存与恢复 Cookies,实现持久化登录。

掌握这些技巧后,你就能编写出更智能、更接近真实浏览器行为的 Python 网络程序。下一节,我们将进入网络爬虫的重要部分——学习如何使用 BeautifulSoup 解析网页内容。

正文完
 0
评论(没有评论)