PythonHTTP请求链路分析_连接建立解析【教程】

酷伟吖_1520

酷伟吖_1520

2026-01-02

417人浏览

原创

python http请求底层包含dns解析、tcp握手、tls协商(https)、http交互四环节;dns解析影响超时,tcp复用连接池,tls校验证书,http处理头体边界,任一环故障都可能导致错误提示失真。

pythonhttp请求链路分析_连接建立解析【教程】

Python 中发起 HTTP 请求看似简单,但底层连接建立过程涉及 DNS 解析、TCP 握手、TLS 协商(HTTPS)、HTTP 协议交互等多个环节。理解这条链路,能帮你快速定位超时、连接拒绝、SSL 错误等常见问题。

DNS 解析:域名到 IP 的第一步

requests 或 urllib 发起请求时,若 URL 使用域名(如 https://api.github.com),Python 会调用系统 getaddrinfo() 获取 IP 地址。这步可能被缓存、被 hosts 文件覆盖,也可能因 DNS 服务器响应慢或失败而卡住。

  • 可通过 socket.gethostbyname("example.com") 手动测试解析是否正常
  • requests 支持传入 proxies 参数,但 DNS 解析默认仍走本地;如需强制走代理 DNS,需配合自定义 resolver(如 dnslib + requests.adapters.HTTPAdapter)
  • 超时控制:requests 的 timeout=(connect, read) 中,connect 超时包含 DNS 解析时间

TCP 连接建立:三次握手与连接池复用

拿到 IP 后,Python 底层 socket 发起 TCP 连接。requests 默认使用 urllib3 的连接池(PoolManager),会复用已有空闲连接,避免重复握手开销。

Digital Twin Discharge Drafter
Digital Twin Discharge Drafter

用于撰写患者出院小结、制定个性化出院指导、模拟出院后结局、降低再入院率

下载
  • 首次请求耗时通常更高,后续同 host 请求可能直接复用连接(Connection: keep-alive
  • 可查看连接状态:response.raw._connection.pool.num_connections(需开启 debug 日志或 inspect urllib3.PoolManager)
  • 连接被拒绝(ConnectionRefusedError)一般表示目标端口未监听,或防火墙拦截;连接超时(TimeoutError)更可能是网络不可达或中间设备丢包

TLS 握手(仅 HTTPS):证书验证与加密协商

HTTPS 请求在 TCP 建立后立即进入 TLS 握手阶段,包括协议版本协商、密钥交换、证书校验等。这是 SSL 错误(如 CERTIFICATE_VERIFY_FAILED、SSLError)的高发环节。

  • requests 默认启用证书验证,依赖 certifi 包内置的 CA 证书列表
  • 内网服务用自签名证书时,可传入 verify=False(不推荐)或指定 verify="/path/to/cert.pem"
  • TLS 版本限制:urllib3 1.26+ 默认禁用 TLS 1.0/1.1;如需兼容旧服务,可通过 PoolManager(ssl_version=ssl.PROTOCOL_TLSv1_2) 强制指定

HTTP 请求发送与响应接收:头与体的边界处理

TCP+TLS 就绪后,才真正发出 HTTP 请求行、头部和可选 body。服务端返回响应时,客户端需按 HTTP 协议解析状态行、headers 和 body 流。

  • Content-Length 或 Transfer-Encoding: chunked 决定如何读取响应体;requests 自动处理,但流式响应(stream=True)需手动迭代 response.iter_content()
  • 重定向由 requests 默认跟随(max_redirects=30),可通过 allow_redirects=False 观察原始 302 响应
  • 若卡在“等待响应头”,可能是服务端未写入响应、长连接挂起,或代理(如 Nginx)配置了 proxy_buffering off 且后端响应异常

不复杂但容易忽略。链路中任一环出问题,都会表现为请求失败,而错误提示未必指向真实原因——比如 DNS 失败可能报 timeout,TLS 验证失败可能被包装成 ConnectionError。动手前先分段验证,比盲目调参数更有效。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

363

5

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2907

6

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

2023.08.04

5365

6

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

541

5

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.07.09

1436

5

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

2024.08.07

3898

3

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

102

12

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

397

23

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

2026.03.16

139

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程