You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加请求头后仍下载空白PDF问题求助(响应码200)

解决requests下载PDF空白(响应200)的问题

以下是针对该问题的排查方向和解决方法:

1. 确认响应内容是否为有效PDF

先验证服务器返回的内容是否真的是PDF,而非伪装成200响应的拦截页面(比如反爬提示、登录验证页):

print(r.headers.get('Content-Type'))  # 正常应返回 application/pdf
print(len(r.content))  # 若长度仅几百字节,大概率是空白或非PDF内容

如果Content-Type不是application/pdf,说明你获取的不是目标PDF,需要补充请求头或处理验证逻辑。

2. 补充必要的请求头

多数网站会校验User-Agent之外的请求头,比如Referer(来源页面)、Cookie(会话信息),可从浏览器开发者工具的请求中复制这些信息补充:

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "Referer": "https://目标PDF所在的页面URL",
    "Cookie": "从浏览器复制的Cookie内容"
}

3. 正确处理stream模式的下载

你启用了stream=True但直接写入r.content,更稳妥的方式是分块读取写入,避免内容截断或内存问题:

r = requests.get(link, stream=True, headers=HEADERS)
r.raise_for_status()  # 主动抛出HTTP错误,避免忽略非200的异常响应
with open(output_filename, 'wb') as f:
    for chunk in r.iter_content(chunk_size=8192):
        if chunk:
            f.write(chunk)

4. 检查重定向情况

部分网站会通过多次重定向返回内容,可手动确认重定向历史和最终请求URL:

print(r.history)  # 查看重定向记录
print(r.url)  # 确认最终请求的URL是否为目标PDF地址

如果重定向到非PDF页面,需调整请求逻辑。

5. 对比文件完整性

将代码下载的PDF文件大小与浏览器直接下载的文件大小对比,若差距较大,说明内容被截断,可能是请求被中途中断或服务器限制了非浏览器请求的内容。


内容的提问来源于stack exchange,提问作者ninja_haze_developer2484

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:27:25