添加请求头后仍下载空白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
相关产品推荐
相关产品推荐

