网络传输笔记

针对于requests库

  1. 用 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"})
  1. request.body中body的内容是什么?与post方式发送时的data相等吗?

request.body 与 POST data 的关系详解
1. request.body 的内容
  • 数据类型bytes (原始二进制数据)
  • 内容:完整的 HTTP 请求体原始数据
  • 特点
    • 包含客户端 POST 请求发送的所有原始字节
    • 未经过任何解析处理
    • 对于表单数据、文件上传等不同内容类型都返回原始字节流
2. POST 发送的 datarequest.body 的关系
发送方式 request.body 内容 是否相等 说明
二进制数据发送 原始二进制字节 ✅ 相等 完全一致
表单数据发送 URL 编码的字符串字节形式 ❌ 不等 需要解析
JSON 数据发送 JSON 字符串的字节形式 ❌ 不等 需要解析
文件上传 multipart 格式的原始字节 ❌ 不等 需要解析
  1. 在网络传输视频流时

posted @ 2026-07-02 17:16  畅畅c  阅读(1)  评论(0)    收藏  举报