requests 通过 urllib3 发送 http 请求,自身仅封装接口;默认启用连接池、ssl 验证和重定向,timeout 分连接与读取两阶段,session 缓存连接池、cookie 和请求头,response.content 为空常因状态码非 2xx 或响应体本为空。

requests 是怎么发 HTTP 请求的
requests 本身不处理底层网络通信,它把活儿全交给了 urllib3。你调用 requests.get(),实际是组装参数后丢给 urllib3.PoolManager.request() 执行。这意味着连接复用、重试、SSL 验证这些事,真正干活的是 urllib3,requests 只负责包装接口和默认行为。
- 默认启用连接池:同一个
Session发多次请求会复用 TCP 连接,避免重复握手开销 - SSL 验证默认开启:访问 HTTPS 站点时自动校验证书,失败直接抛
requests.exceptions.SSLError - 重定向默认跟随:最多 30 次跳转,超限抛
requests.exceptions.TooManyRedirects - 超时默认不设:不传
timeout参数就可能卡死,尤其在弱网或服务无响应时
Session 对象到底在缓存什么
Session 不是“记住登录态”的魔法盒子,它只缓存三样东西:连接池、Cookie、默认请求头。所谓“保持登录”,其实是服务器返回了 Set-Cookie,Session 自动存下来,后续请求再带上——仅此而已。
- Cookie 存在内存里,不是持久化存储:程序退出就丢,别指望它跨进程或跨启动生效
- 连接池按 host + port 分桶:访问
<a href="https://www.php.cn/link/710ba53b0d353329706ee1bedf4b9b39">https://www.php.cn/link/710ba53b0d353329706ee1bedf4b9b39</a>和<a href="https://www.php.cn/link/2f7eaf16eceec07fc19c93090e90033a">https://www.php.cn/link/2f7eaf16eceec07fc19c93090e90033a</a>是两个独立池 - 默认 User-Agent 是
python-requests/2.x.x:有些 API 会拦截这个 UA,需手动设headers={'User-Agent': 'xxx'}
timeout 参数为什么总让人困惑
timeout 不是一个值,而是两个阶段的上限:(connect_timeout, read_timeout)。只传一个数字(如 timeout=5),它只控制连接建立时间,读响应仍可能无限卡住。
华友协同办公管理系统(华友OA),基于微软最新的.net 2.0平台和SQL Server数据库,集成强大的Ajax技术,采用多层分布式架构,实现统一办公平台,功能强大、价格便宜,是适用于企事业单位的通用型网络协同办公系统。 系统秉承协同办公的思想,集成即时通讯、日记管理、通知管理、邮件管理、新闻、考勤管理、短信管理、个人文件柜、日程安排、工作计划、工作日清、通讯录、公文流转、论坛、在线调查、
-
timeout=5:连接必须 5 秒内建好,但服务器发回数据花 60 秒也不会超时 -
timeout=(3, 10):3 秒连不上就报错;连上了,但 10 秒内没收到完整响应也报错 - 设成
timeout=None或不设:读阶段彻底放弃超时控制,遇到挂起的服务就一直等 - 常见错误现象:
requests.get(url)卡住不动 → 八成是漏了read_timeout
为什么有时候 response.content 是空的
response.content 是原始字节,response.text 是解码后的字符串。空 content 通常不是没数据,而是响应体确实为空(比如 204 No Content),或者你误读了 response.status_code 就直接取内容。
立即学习“Python免费学习笔记(深入)”;
- 状态码非 2xx 时,很多 API 返回空 body,但
response.content仍是b'',不是报错 -
response.text在编码未知时会 fallback 到 ISO-8859-1,可能导致乱码,别无脑信它 - 流式下载场景下,如果用了
stream=True,response.content会触发整个 body 加载进内存,大文件慎用
HTTP 协议细节、SSL 握手过程、DNS 解析这些,requests 全部透传给底层库,它自己没实现任何网络栈。想调优性能或排查超时,得顺着 urllib3 和系统 socket 层去看。








