python - 检查 Python 请求库是否正在下载文件

标签 python http python-requests

我在开发脚本时一直遇到问题,因此我没有收到任何输出,并且脚本的内存使用量随着时间的推移越来越大。我发现问题出在我正在检查请求库的一些 URL 上。我期待下载一个网页,但我下载了一个大文件。然后所有这些数据都存储在内存中,导致我出现问题。

我想知道的是;请求库有什么方法可以检查正在下载的内容吗?使用 wget 我可以看到:长度:710330974 (677M) [application/zip]。

此信息在请求的 header 中是否可用?如果是这样,是否有一种方法可以在确定它不是 HTML 网页后终止下载?

提前致谢。

最佳答案

是的,标题可以告诉您很多关于该页面的信息,大多数页面将包含一个 Content-Length 标题。

然而,默认情况下,请求会在 .get().post() 等调用返回之前完整下载。设置 stream=True 关键字以延迟加载响应:

response = requests.get(url, stream=True)

现在您可以检查 header ,如果您不喜欢您发现的内容,则丢弃该请求:

length = int(response.headers.get('Content-Length', 0))
if length > 1048576:
    print 'Response larger than 1MB, discarding

随后访问 .content.text 属性,或 .json() 方法将触发响应的完整下载。

关于python - 检查 Python 请求库是否正在下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021120/

相关文章:

node.js - 请求:使用请求 node.js 两次调用响应函数获取请求

curl - POST 请求在 Postman 中有效,但在 Python 请求中无效(200 响应与机器人检测)

python - 在python请求中,SSLError : [SSL] PEM lib (_ssl. c :2600) mean?是什么意思

python - Pandas 日期时间格式化与时区转换

python - 在不隐藏构造函数、可选参数或功能的情况下继承时避免使用长构造函数

angular - 如何在 Angular5 上从 express 渲染 html 模板

python - curl vs python "requests"访问 API 时

python - 在 python 中创建日历事件 O365 包?

python - Google Bigquery 某些内容返回空/无行

http - WebSphere Liberty 中 SOAP 客户端代理的基本身份验证