使用Python requests无需下载文件获取web资源大小的方法
Python不下载完整Web资源获取大小的方法
实现的核心逻辑是使用HTTP的HEAD请求替代常规GET请求:HEAD请求只会要求服务器返回响应头,不会返回实际的资源内容,只要服务器支持HEAD请求,我们从响应头的Content-Length字段就能直接拿到资源的字节大小,全程不会下载完整资源。
具体实现方式
方法1:使用Python标准库urllib(无需安装第三方依赖)
from urllib.request import Request, urlopen def get_resource_size(url: str) -> int | None: req = Request(url, method='HEAD') try: with urlopen(req) as resp: return int(resp.headers.get('Content-Length', 0)) except Exception: # 处理请求失败、服务器不支持HEAD等异常情况 return None
方法2:使用第三方requests库(写法更简洁)
import requests def get_resource_size(url: str) -> int | None: try: resp = requests.head(url, timeout=10) resp.raise_for_status() return int(resp.headers.get('Content-Length', 0)) except Exception: return None
注意事项
- 部分服务器未兼容HEAD请求,会返回405等错误状态码,这种情况下可以改为发送GET请求,但拿到响应头后直接中断连接,不要读取响应体内容,也能达到不下载完整资源的效果
- 如果资源采用分块传输编码(响应头存在
Transfer-Encoding: chunked),响应头不会包含Content-Length字段,这种场景下无法通过该方法拿到资源大小,只能下载完整内容后统计 - 遇到需要鉴权的资源,在请求中带入对应的Cookie、Token等鉴权信息即可,逻辑和普通请求一致
内容的提问来源于stack exchange,提问作者i.k abolo
相关产品推荐
相关产品推荐

