网络传输笔记
针对于requests库
-
用 POST 方式上传数据时,data 的值只能是 bytes 类型吗?
不完全是。data 可以接受多种类型,但最终都会被转换为 bytes 传输。具体取决于使用的 HTTP 客户端库(如 requests、urllib 等)
1. requests.post() 的 data 参数支持的类型
| 数据类型 | 是否自动转换 | 适用场景 | 示例 |
|---|---|---|---|
bytes |
直接发送 | 二进制数据(如 JPEG 图像) | data = b'\xff\xd8...' |
str |
自动转 bytes |
文本数据(如 JSON 字符串) | data = '{"key": "value"}' |
dict |
自动转 x-www-form-urlencoded |
表单提交 | data = {"key": "value"} |
list/tuple |
自动转 multipart/form-data |
文件上传 | data = [("file", open("img.jpg", "rb"))] |
2. 关键说明
- 二进制数据:必须显式转为
bytes(如img_encoded.tobytes()) - 文本数据:可以传
str,库会自动按UTF-8编码为bytes - 表单/文件上传:库会处理编码,无需手动转
bytes
3. 代码示例
import requests
# 场景1:发送二进制数据(必须 bytes)
_, img_encoded = cv2.imencode('.jpg', frame)
requests.post(url, data=img_encoded.tobytes())
# 场景2:发送文本(自动转 bytes)
requests.post(url, data="Hello, World!")
# 场景3:发送表单(自动转 x-www-form-urlencoded)
requests.post(url, data={"key": "value"})
-
request.body中body的内容是什么?与post方式发送时的data相等吗?
request.body 与 POST data 的关系详解
1. request.body 的内容
- 数据类型:
bytes(原始二进制数据) - 内容:完整的 HTTP 请求体原始数据
- 特点:
- 包含客户端 POST 请求发送的所有原始字节
- 未经过任何解析处理
- 对于表单数据、文件上传等不同内容类型都返回原始字节流
2. POST 发送的 data 与 request.body 的关系
| 发送方式 | request.body 内容 |
是否相等 | 说明 |
|---|---|---|---|
| 二进制数据发送 | 原始二进制字节 | ✅ 相等 | 完全一致 |
| 表单数据发送 | URL 编码的字符串字节形式 | ❌ 不等 | 需要解析 |
| JSON 数据发送 | JSON 字符串的字节形式 | ❌ 不等 | 需要解析 |
| 文件上传 | multipart 格式的原始字节 | ❌ 不等 | 需要解析 |
-
在网络传输视频流时

浙公网安备 33010602011771号