Python http.client (原 httplib) 详解
首先需要明确的是,httplib 是 Python 2 中的模块名称,在 Python 3 中,该模块已被重命名为 http.client,由于目前绝大多数项目使用 Python 3,本文将以 http.client 为主进行讲解。
http.client 是 Python 标准库提供的一个低级 HTTP 客户端实现,它直接处理 HTTP 协议的细节,不像 requests 或 httpx 那样提供高度封装的 API。
基础概念
http.client 允许你通过建立 TCP 连接并发送符合 HTTP 规范的文本请求来与服务器交互,它支持:
- HTTP (通过
HTTPConnection) - HTTPS (通过
HTTPSConnection)
快速上手:发送 GET 请求
发送一个简单的 GET 请求并读取响应内容:
import http.client
# 1. 建立连接 (仅指定域名,不含 http://)
conn = http.client.HTTPConnection("www.example.com")
# 2. 发送请求
conn.request("GET", "/")
# 3. 获取响应
response = conn.getresponse()
# 4. 读取数据
print(f"状态码: {response.status}")
print(f"原因: {response.reason}")
print("响应内容:")
print(response.read().decode())
# 5. 关闭连接
conn.close()
发送 POST 请求
发送 POST 请求需要指定 请求体 (body) 和 请求头 (headers):
import http.client
conn = http.client.HTTPConnection("www.example.com")
# 准备数据
payload = "name=JohnDoe&age=30"
headers = {"Content-type": "application/x-www-form-urlencoded"}
# 发送 POST 请求
conn.request("POST", "/api/user", body=payload, headers=headers)
response = conn.getresponse()
print(response.read().decode())
conn.close()
处理 HTTPS 连接
对于加密的 HTTPS 请求,必须使用 HTTPSConnection:
import http.client
# 使用 HTTPSConnection 代替 HTTPConnection
conn = http.client.HTTPSConnection("www.google.com")
conn.request("GET", "/")
response = conn.getresponse()
print(response.status)
conn.close()
http.client 与 requests 的对比
在实际开发中,除非有极其特殊的性能需求或禁止安装第三方库,否则通常推荐使用 requests 库。
| 特性 | http.client |
requests |
|---|---|---|
| 层级 | 低级 (Low-level) | 高级 (High-level) |
| 易用性 | 较复杂,需手动处理连接和编码 | 非常简单,API 直观 |
| 依赖 | 标准库 (无需安装) | 第三方库 (需 pip install) |
| 会话管理 | 需手动管理连接 |
支持 |
| JSON 支持 | 需手动使用 json 模块转换 |
内置 .json() 方法 |
| 重定向 | 需手动处理 301/302 状态码 | 自动处理重定向 |
核心注意事项
- 资源释放:务必调用
conn.close()或使用上下文管理器,否则可能会导致连接泄漏。 - 响应读取:
response.read()会一次性将所有内容加载到内存中,对于大文件,建议循环读取小块数据。 - 编码问题:
read()返回的是 bytes (字节流),需要使用.decode('utf-8')转换为字符串。 - 超时设置:在创建连接时可以通过
timeout参数设置超时时间,HTTPConnection("example.com", timeout=10)。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/492306.html



