Python3.8标准库能否实现带verify=True、stream=True的requests.get功能
问题结论
可以通过Python 3.8标准库实现verify=True、stream=True对应的请求功能,无需引入requests库的额外内存开销。
功能对应实现说明
- 等效
verify=True的SSL证书校验:Python 3.8中urllib请求默认开启SSL证书校验,也可通过ssl模块显式配置校验规则,和requests的verify参数功能完全一致。 - 等效
stream=True的流式读取:urllib.request.urlopen返回的HTTPResponse对象本身支持按块迭代读取,不会一次性加载全量响应内容,和requests的stream参数效果一致。
完整示例代码
from urllib.request import urlopen, Request import ssl # 显式创建SSL上下文,默认开启证书校验,等价于 verify=True # 如需自定义CA证书,可调用 ssl_ctx.load_verify_locations(cafile="自定义CA路径") ssl_ctx = ssl.create_default_context() # 构造请求(如需自定义请求头可使用Request对象) req = Request( "https://example.com", headers={"User-Agent": "your-custom-ua/1.0"} ) with urlopen(req, context=ssl_ctx, timeout=10) as resp: # 按1KB块流式读取响应,等价于 stream=True 下的 iter_content 用法 for chunk in iter(lambda: resp.read(1024), b""): # 此处处理每一块响应数据,例如写入本地文件 pass
补充说明
如果你的场景需要处理POST请求、表单提交等基础逻辑,也可以通过urllib.parse.urlencode构造请求体,传入Request对象的data参数实现,全部功能均可通过标准库完成,无额外依赖。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

