当前位置: 代码网 > it编程>前端脚本>Python > Python操作Cookie的完全指南

Python操作Cookie的完全指南

2026年01月18日 Python 我要评论
在 python 开发中,cookie 的应用主要分为两大场景:爬虫(模拟浏览器获取 / 携带 cookie) 和web 开发(给客户端设置 cookie)。一、爬虫场景:用 requests 库获取

在 python 开发中,cookie 的应用主要分为两大场景:爬虫(模拟浏览器获取 / 携带 cookie)web 开发(给客户端设置 cookie)

一、爬虫场景:用 requests 库获取 / 携带 cookie

爬虫中操作 cookie 的核心需求是:模拟用户登录状态(如爬取需要登录的网站数据)、维持会话连接。requests 库是 python 爬虫的首选工具,处理 cookie 简洁高效。

1. 前置准备

先安装 requests 库(若未安装):

pip install requests

2. 场景 1:获取网站返回的 cookie

访问网站时,服务器会自动返回 cookie,用 requests 可直接提取:

import requests

\# 目标网站(以百度为例)

url = "https://www.baidu.com"

\# 发送请求,获取响应

response = requests.get(url)

\# 方式1:直接获取响应中的cookie(requestscookiejar对象,类似字典)

cookies = response.cookies

print("响应cookie(requestscookiejar格式):")

print(cookies)

\# 方式2:转为字典格式(更易读取)

cookie\_dict = requests.utils.dict\_from\_cookiejar(cookies)

print("\ncookie(字典格式):")

for key, value in cookie\_dict.items():

    print(f"{key}: {value}")

\# 方式3:获取响应头中的set-cookie(原始格式)

print("\n响应头中的set-cookie:")

print(response.headers.get("set-cookie"))

3. 场景 2:携带 cookie 发送请求(模拟登录状态)

很多网站需要登录后才能访问核心数据,此时需先登录获取 cookie,再携带 cookie 请求目标页面。

示例:模拟登录某测试网站(以 github 简化示例)

import requests

\# 1. 登录接口(实际开发中替换为目标网站的登录url)

login\_url = "https://github.com/session"

\# 登录参数(需根据网站表单字段调整,可通过f12抓包获取)

login\_data = {

    "login": "你的github账号",

    "password": "你的github密码",

    "commit": "sign in"

}

\# 2. 创建会话对象(自动维持cookie,关键!)

session = requests.session()

\# 3. 发送登录请求(会话会自动保存登录后的cookie)

response = session.post(login\_url, data=login\_data)

\# 4. 携带cookie访问需要登录的页面(如个人主页)

profile\_url = "https://github.com/你的用户名"

profile\_response = session.get(profile\_url)

\# 验证是否登录成功(判断页面是否包含个人信息)

if "你的用户名" in profile\_response.text:

    print("登录成功,已携带cookie访问个人主页!")

    # 查看会话中保存的cookie

    print("\n会话中保存的cookie:")

    for key, value in session.cookies.get\_dict().items():

        print(f"{key}: {value}")

else:

    print("登录失败,请检查账号密码或参数格式!")

4. 场景 3:手动设置 cookie 发送请求

若已提前获取 cookie(如浏览器中复制),可手动构造 cookie 发送请求:

import requests

url = "https://www.baidu.com"

\# 手动构造cookie(字典格式,从浏览器复制的cookie需转为键值对)

headers = {

    "cookie": "bduss=xxx; baiduid=xxx; bidupsid=xxx",  # 替换为实际cookie

    "user-agent": "mozilla/5.0 (windows nt 10.0; win64; x64) chrome/120.0.0.0"  # 模拟浏览器

}

response = requests.get(url, headers=headers)

print("携带手动设置的cookie访问成功!")

爬虫操作 cookie 注意事项:

  • requests.session()自动维持会话,避免重复处理 cookie;
  • 登录时的参数(如login_data)需通过浏览器 f12 抓包获取,确保字段名与表单一致;
  • 部分网站的 cookie 有过期时间,长时间爬取需定期重新登录刷新 cookie;
  • 避免频繁请求,添加time.sleep(1)等延时,防止被封 ip。

二、web 开发场景:flask/django 设置 cookie

在 python web 开发中,服务器需要给客户端(浏览器)设置 cookie,用于记住用户状态(如登录状态、用户偏好)。以下是 flask 和 django 框架的实操示例。

1. flask 框架:设置 / 读取 / 删除 cookie

前置准备:安装 flask

pip install flask

完整示例代码:

from flask import flask, make\_response, request

app = flask(\_\_name\_\_)

\# 1. 设置cookie(给客户端发送cookie)

@app.route("/set\_cookie")

def set\_cookie():

    # 创建响应对象

    response = make\_response("已为你设置cookie!")

    

    # 设置cookie:key=value,max\_age=过期时间(秒),path=作用路径

    response.set\_cookie(

        key="username",

        value="zhangsan",

        max\_age=3600,  # 1小时后过期

        path="/",       # 整站生效

        secure=false,   # 本地开发设为false,https环境设为true

        httponly=true   # 禁止javascript读取,提升安全性

    )

    

    # 再设置一个持久cookie(7天过期)

    response.set\_cookie("theme", "dark", max\_age=7\*24\*3600)

    return response

\# 2. 读取客户端的cookie

@app.route("/get\_cookie")

def get\_cookie():

    # 读取cookie:request.cookies.get(key),不存在返回none

    username = request.cookies.get("username")

    theme = request.cookies.get("theme")

    

    if username and theme:

        return f"当前cookie:用户名={username},主题={theme}"

    else:

        return "未检测到cookie,请先访问/set\_cookie设置"

\# 3. 删除cookie

@app.route("/delete\_cookie")

def delete\_cookie():

    response = make\_response("已删除cookie!")

    # 删除cookie:key需与设置时一致,path需匹配

    response.delete\_cookie("username", path="/")

    response.delete\_cookie("theme", path="/")

    return response

if \_\_name\_\_ == "\_\_main\_\_":

    app.run(debug=true)

测试步骤:

  1. 运行代码,访问http://127.0.0.1:5000/set_cookie设置 cookie;
  2. 访问http://127.0.0.1:5000/get_cookie查看 cookie;
  3. 访问http://127.0.0.1:5000/delete_cookie删除 cookie。

2. django 框架:设置 / 读取 / 删除 cookie

前置准备:安装 django 并创建项目

pip install django

django-admin startproject cookie\_demo

cd cookie\_demo

python manage.py startapp user

步骤 1:配置项目(cookie_demo/settings.py)

installed_apps中添加user

installed\_apps = \[

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'user'  # 添加这行

]

步骤 2:编写视图(user/views.py)

from django.http import httpresponse

\# 1. 设置cookie

def set\_cookie(request):

    response = httpresponse("django已设置cookie!")

    # 设置cookie:max\_age=秒,expires=datetime(二选一)

    response.set\_cookie(

        key="user\_id",

        value="1001",

        max\_age=3600,  # 1小时过期

        path="/",

        httponly=true

    )

    return response

\# 2. 读取cookie

def get\_cookie(request):

    # 读取cookie:request.cookies是字典

    user\_id = request.cookies.get("user\_id")

    if user\_id:

        return httpresponse(f"读取到cookie:user\_id={user\_id}")

    else:

        return httpresponse("未找到cookie,请先访问/set\_cookie")

\# 3. 删除cookie

def delete\_cookie(request):

    response = httpresponse("django已删除cookie!")

    response.delete\_cookie("user\_id", path="/")

    return response

步骤 3:配置 url(cookie_demo/urls.py)

from django.contrib import admin

from django.urls import path

from user.views import set\_cookie, get\_cookie, delete\_cookie

urlpatterns = \[

    path('admin/', admin.site.urls),

    path('set\_cookie/', set\_cookie),

    path('get\_cookie/', get\_cookie),

    path('delete\_cookie/', delete\_cookie),

]

测试步骤:

  1. 运行服务器:python ``manage.py`` runserver
  2. 访问http://127.0.0.1:8000/set_cookie设置 cookie;
  3. 访问http://127.0.0.1:8000/get_cookie查看 cookie;
  4. 访问http://127.0.0.1:8000/delete_cookie删除 cookie。

web 开发操作 cookie 注意事项:

  • 安全配置:敏感 cookie(如用户 id、登录凭证)务必设置httponly=true(防止 xss 攻击)和secure=true(仅 https 传输);
  • 过期时间:避免设置过长的过期时间,敏感操作的 cookie 建议 1 小时内过期;
  • 中文处理:若需存储中文,需用urllib.parse.quote()编码,读取时用urllib.parse.unquote()解码:
\# flask示例:存储中文cookie

from urllib.parse import quote, unquote

response.set\_cookie("nickname", quote("张三"), max\_age=3600)

\# 读取中文cookie

nickname = unquote(request.cookies.get("nickname"))
  • 跨域问题:默认 cookie 不支持跨域,若需跨域共享 cookie,需配置cors_allow_credentials=true(flask 需安装flask-cors,django 需配置 cors)。

三、python 操作 cookie 常见问题与避坑

1. 爬虫场景:cookie 不生效

  • 原因:未使用requests.session(),每次请求都是独立会话;
  • 解决:用session = requests.session(),所有请求通过 session 发送,自动维持 cookie。

2. web 开发:cookie 设置后无法读取

  • 原因 1:path配置不一致(设置时path=/user,读取时在/路径);
  • 原因 2:httponly=true导致前端 javascript 无法读取(但后端可正常读取);
  • 解决:确保设置和读取的path一致,根据需求调整httponly参数。

3. 中文 cookie 乱码

  • 原因:cookie 默认不支持中文,直接存储会乱码;
  • 解决:用urllib.parse.quote()编码,读取时用unquote()解码。

4. 爬虫被封 ip

  • 原因:频繁请求且未携带真实 user-agent,被网站识别为爬虫;
  • 解决:在请求头中添加user-agent(模拟浏览器),并添加合理延时。

以上就是python操作cookie的完全指南的详细内容,更多关于python操作cookie指南的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com