当前位置: 首页 > news >正文

requests中post中data=None, json=None两个参数区别

requests.post() 方法中,datajson 主要用于发送请求体,但它们的作用和格式有所不同。

1. data 参数

  • 用途:用于发送表单数据或原始二进制数据。
  • 格式
    • 可以是 字典(dict)(默认会编码为 application/x-www-form-urlencoded)。
    • 也可以是 字符串(str)字节(bytes)文件对象

示例:以表单形式发送数据(默认 application/x-www-form-urlencoded

import requests

url = "https://example.com/api"
data = {"username": "admin", "password": "123456"}

response = requests.post(url, data=data)
print(response.request.headers["Content-Type"])  
# 输出: application/x-www-form-urlencoded

示例:以字符串发送数据

response = requests.post(url, data="username=admin&password=123456")
print(response.request.headers["Content-Type"])  
# 仍然是 application/x-www-form-urlencoded

示例:发送二进制数据

binary_data = b"\x89PNG\r\n\x1a\n..."  # PNG 文件数据
response = requests.post(url, data=binary_data)

2. json 参数

  • 用途:用于直接发送 JSON 格式的数据(application/json)。
  • 格式:应为 JSON 可序列化的 Python 对象dictlist 等)。
  • 自动序列化requests 会自动将其转换为 JSON 字符串,并自动设置 Content-Type: application/json

示例:发送 JSON 格式的数据

response = requests.post(url, json={"username": "admin", "password": "123456"})
print(response.request.headers["Content-Type"])  
# 输出: application/json

3. data vs json 区别总结

datajson
传输格式application/x-www-form-urlencoded(默认)或 multipart/form-data(如文件上传)application/json
数据类型dict(默认转换为 key=value&key2=value2)、字符串、字节dict(自动转换为 JSON 格式的字符串)
是否自动 JSON 编码不会 自动转换为 JSON,需要手动 json.dumps()自动 转换为 JSON

4. 什么时候使用 data vs json

使用 data

  • 当 API 需要表单提交时(如 application/x-www-form-urlencoded)。
  • 上传二进制数据(如 bytes、文件对象)。

使用 json

  • 当 API 需要 JSON 格式的请求体时(如 REST API)。
  • 与 Flask/Django/FastAPI 这种 JSON API 兼容的后端通信时

示例:如果 API 只接受 JSON,错误用法

requests.post(url, data={"username": "admin", "password": "123456"})  # ❌ 可能会失败

正确做法:

requests.post(url, json={"username": "admin", "password": "123456"})  # ✅ 推荐使用 json

或者:

import json
requests.post(url, data=json.dumps({"username": "admin", "password": "123456"}), headers={"Content-Type": "application/json"})  # ✅ 手动转换

如果你使用 data 但 API 需要 application/json,服务器可能会解析失败。所以 如果 API 需要 JSON,就直接用 json=,避免手动 json.dumps()Content-Type 设置。

相关文章:

  • Git 的详细介绍及用法
  • JESD204B协议及IP仿真
  • 什么是进程线程
  • ubuntu 和 RV1126 交叉编译Mosqutiio-1.6.9
  • linux批量使用多个用户名登录脚本、为了给主机增加一个指定用户名的登录记录、无需root密码的主机切换到root方式
  • 【玩转全栈】---- Pinia 组件状态管理器
  • 卷积神经网络与计算机视觉:从数学基础到实战应用
  • 沉浸式CSS学习路径
  • 【贪心算法3】
  • git设置本地仓库和远程仓库
  • 解决 word 2016 粘贴图片老是乱飘的问题
  • 十分钟用DeepSeek v3快速搭建企业级本地私有知识库(保姆级教程),AI终于私有化了!
  • Java糊涂包(Hutool)的安装教程并进行网络爬虫
  • 训练大模型LLM选择哪种开发语言最好
  • 2.3 DeepSeek SDK接入与鉴权体系设计
  • RabbitMQ (Java)学习笔记
  • electron+vue+webview内嵌网页并注入js
  • Android Glide 框架线程管理模块原理的源码级别深入分析
  • 第七次CCF-CSP认证(含C++源码)
  • 微前端最佳实践:Module Federation 的使用步骤详解
  • 怎么用div做网站/超级优化大师下载
  • Django可以做门户网站吗/绍兴seo排名收费
  • 网站建设网上售票系统/福建seo顾问
  • asp做微网站设计/百度怎么打广告在首页
  • 烟台市最好的专业做网站的公司/win10最强性能优化设置
  • 什么是网站二级目录/百度公司全称叫什么