/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
Python对接百度网盘OpenAPI最全教程|OAuth授权+自动续Token+读取文件+直链下载
文章标签:Python、百度网盘API、OAuth2.0、网盘下载、requests接口开发、自动化运维
阅读难度:零基础入门
适配环境:Python3.7+、Windows/Linux/macOS全平台通用
博文前言:网上大部分网盘API教程密钥泄露、代码残缺、接口报错、Token不会续期,本文从零梳理百度网盘官方OAuth2.0授权全流程,全文已处理私密密钥、Token、应用密钥,零基础复制代码、填入自己参数即可一键运行。完整实现:账号授权拿码、Token自动刷新、查询网盘容量、遍历网盘目录、获取文件直链、流式下载本地六大功能,同时复盘全网高频报错解决方案,新手避坑一站式自学。
一、前置准备工作
1.1 依赖库安装
仅需安装网络请求核心库,无第三方复杂依赖,终端执行安装命令:
pip install requests
1.2 百度开放平台应用注册
进入百度开放平台,个人开发者注册入驻
创建桌面应用,授权权限勾选:basic、netdisk
回调地址固定填写:oob
创建完成后获取:client_id应用ID、client_secret应用密钥,自行保存备用
二、网盘OAuth2.0标准授权流程
百度网盘接口全部采用标准授权码模式,整套流程三步完成,适配所有网盘业务接口调用。
2.1 第一步:浏览器授权获取一次性Code
通用授权链接模板
https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=你的应用ID&scope=basic,netdisk&display=popup&redirect_uri=oob
操作流程:
浏览器打开链接,登录个人百度网盘账号,允许应用授权读写网盘数据
页面直接展示一串授权Code,Code仅可使用一次,兑换Token后立即失效
2.2 第二步:Code兑换业务Token
Token兑换接口地址
https://openapi.baidu.com/oauth/2.0/token
固定请求参数
-
grant_type:authorization_code
-
client_id:个人应用ID
-
client_secret:个人应用密钥
-
code:上一步获取的一次性授权码
-
redirect_uri:oob
2.3 Token字段详解
{
\”expires_in\”: 2592000,
\”refresh_token\”: \”长效续期凭证\”,
\”access_token\”: \”接口调用凭证\”,
\”scope\”: \”basic netdisk\”
}
-
expires_in:2592000秒等于30天,access_token自动过期
-
access_token:调用网盘查询、下载接口核心凭证
-
refresh_token:长期有效续期密钥,无需重新登录即可刷新新Token,刷新后旧密钥失效
2.4 授权流程报错复盘
本次实测问题:调用token兑换接口提示网页解析失败,不支持网页类型,属于平台接口响应格式变更,直接使用代码请求即可,浏览器访问会报错,不影响代码调用。
三、全功能可运行代码
代码已完成全部优化:去除冗余导入、增加异常捕获、日志分离、大文件流式下载、防参数拼接报错、自动Token续期,所有私密信息全部占位,无泄露风险。
import json
import requests
# ===================== 【自定义配置区 仅此处修改个人参数】 =====================
# 百度开放平台应用密钥
CLIENT_ID = \”替换为自己的client_id\”
CLIENT_SECRET = \”替换为自己的client_secret\”
# 首次授权获取的长效刷新Token
REFRESH_TOKEN = \”替换为自己的refresh_token\”
# 网盘IoT设备ID,不用设备接口可随意填写
DEVICE_ID = \”自定义设备编号\”
# 网盘目标文件夹路径 格式务必以/开头结尾
PAN_TARGET_DIR = \”/网盘文件夹路径/\”
# 全局请求UA(网盘接口必填)
PAN_HEADERS = {
\”User-Agent\”: \”pan.baidu.com\”
}
# ============================================================================
def refresh_netdisk_token() –> tuple:
\”\”\”
自动刷新网盘AccessToken,过期无需重新登录
:return: 新业务token, 新长效刷新token
\”\”\”
try:
url = \”https://openapi.baidu.com/oauth/2.0/token\”
params = {
\”grant_type\”: \”refresh_token\”,
\”client_id\”: CLIENT_ID,
\”client_secret\”: CLIENT_SECRET,




