使用Python requests从受密码保护站点下载文件的问题求助
问题排查思路
一、代码逻辑错误排查
- 函数未调用:你代码中定义了
login()函数,但没有实际执行调用的代码,整个登录、下载逻辑根本没有运行,自然不会有文件生成也不会报错。 - 写入对象错误:你下载文件时写入的是
r.content,r是首次请求登录页的响应对象,你请求目标下载地址返回的内容存在resp变量中,就算逻辑跑通了你写入的也是登录页的HTML内容,不是目标文件。 - 会话未复用:获取CSRF Token时你使用的是
requests.get(url1),而不是你初始化的会话s.get(url1),两个请求分属不同会话,拿到的CSRF Token和后续s.post提交的会话cookie不匹配,必然登录失败。 - 路径有效性检查:检查你写入的文件路径
/Users/...../Website\ Grab/是否真实存在,若父目录不存在,open操作会报错,若你捕获了异常未抛出也会出现无报错无文件的情况。
二、登录逻辑有效性排查
- 打印登录请求的状态码:
post请求后可以输出post_resp = s.post(...),打印post_resp.status_code确认是否为200,若返回403/400说明提交的参数有误。 - 校验登录结果:打印
post_resp.text前500个字符,确认是否返回登录成功的提示,或者打印s.cookies查看是否存在登录成功后下发的身份凭证cookie。 - 核对表单参数:用浏览器F12的网络面板抓包真实登录时提交的表单字段,确认是否有遗漏的隐藏字段,你目前只提交了用户名、密码、CSRF Token,部分站点会额外要求其他隐藏参数。
三、下载请求有效性排查
- 检查下载请求的状态码:打印
resp.status_code,如果返回403说明未登录成功,返回404说明下载地址错误,返回302说明被跳转到了登录页。 - 校验下载响应内容:打印
resp.text[:500],确认返回的是目标文件的二进制内容,还是登录页的HTML代码。 - 补充请求头:部分站点下载文件要求携带
Referer、Origin等请求头,可对照浏览器抓包的请求头补充完整。
内容的提问来源于stack exchange,提问作者JMax
相关产品推荐
相关产品推荐

