REQUESTS 实战 COOKIE

Cookie 实验室

网页怎么知道你已经登录?亲手发三次请求,看看服务器发下的 Cookie 如何让你打开课程资料页。

零基础可做浏览器 + Python Requests
HTTP TRACE / 06 RESPONSE Set-Cookie REQUEST Cookie 01 / LOGIN

01 BROWSER LAB

发出三次请求

按顺序点击按钮,对照响应状态和请求头。

  1. GET /downloads

    先用访客身份访问

    不发送 Cookie,看看服务器会不会给你课程资料。

    查看响应
    待练习
  2. POST /api/login

    登录并接收 Cookie

    提交公开的课堂账号。登录成功后,响应头会下发 lab_session。

    账号 student密码 cookie123
    查看响应
    待练习
  3. GET /downloads

    带着 Cookie 再访问

    访问同一个地址。这次让浏览器带上登录 Cookie,再与第 1 步对比。

    查看响应
    待练习

HTTP 观察台

实际请求
响应状态等待请求
请求—
响应内容
完成任意一步,这里会显示服务器的响应。
服务器 → 客户端Set-Cookie

登录成功时,服务器通过响应头发下 Cookie。

客户端 → 服务器Cookie

后续请求带上 Cookie,服务器据此识别登录状态。

02 PYTHON LAB

换用 Requests 做一遍

用 Python 重做刚才的三次请求。先自己试试,再展开参考代码。

写出你的第一个 Cookie 脚本

  1. 用 requests.get() 直接访问 /downloads,打印状态码。
  2. 用 requests.post() 向 /api/login 提交表单,把账号和密码传给 data=。观察响应头 Set-Cookie 和 response.cookies。
  3. 把登录响应的 response.cookies 传给下一次 GET 的 cookies=,打印状态码和资料页的 HTML。

需要安装 Requests 时运行 python -m pip install requests。

参考代码Python 3 · Requests

response.cookies 是 RequestsCookieJar,可以直接传给下一次请求。

cookie_lab.py
import requests

base_url = "https://pachong.datouboshi.com"
target = f"{base_url}/downloads"

guest = requests.get(target, timeout=10)
print("访客访问", guest.status_code)

login = requests.post(
    f"{base_url}/api/login",
    data={"username": "student", "password": "cookie123"},
    timeout=10,
)
login.raise_for_status()
print("Set-Cookie", login.headers.get("Set-Cookie"))
print("CookieJar", type(login.cookies).__name__)
for cookie in login.cookies:
    print(cookie.name, cookie.value)

page = requests.get(target, cookies=login.cookies, timeout=10)
print("携带 Cookie", page.status_code)
print(page.text)