Python requests.post中data与json参数的区别及Content-Type默认行为

咖啡半糖
咖啡半糖
发布时间:2026-10-13| 4人浏览过
原创

本文详解Python requests库中POST请求的data与json参数区别。重点说明两者在dict或str类型下,未指定headers时Content-Type的默认值差异:data默认为application/x-www-form-urlencoded或text/plain,json默认为application/json。同时展示request.body内容的格式差异,并提供Django后端接收及Python客户端发送的完整代码示例。

data与json参数的基本类型支持

在使用Python的requests库发起POST请求时,通常可以通过data或json两个参数来传递报文数据。

这两个参数均支持字符串(str)和字典(dict)两种数据类型。

Content-Type默认行为差异

两者的主要区别体现在默认的Content-Type头部设置及请求体格式上。

首先,无论json参数传入的是字符串还是字典,若未显式指定headers中的content-type,其默认值均为application/json。

其次,当data参数为字典类型且未指定content-type时,默认值为application/x-www-form-urlencoded,这等同于普通HTML表单提交数据的形式。

若data参数为字符串类型且未指定content-type,默认值则为text/plain。

对于json参数,即使传入的是字典类型,若未指定content-type,默认值依然保持为application/json。

当json参数为字符串且未指定content-type时,默认值同样为application/json。

在请求体内容方面,使用data参数提交数据时,request.body的内容通常呈现为a=1&b=2这样的键值对拼接格式;而使用json参数提交数据时,request.body的内容则是标准的JSON字符串格式,例如'{"a": 1, "b": 2}'。

Django后端接收与Python客户端发送示例

为了更直观地理解,以下通过一个具体的Django项目示例进行演示。

假设有一个名为pro_1的Django项目,其urls.py配置如下。

urls.py文件定义了路由映射,将/index/路径指向views中的index视图函数。


from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^index/', views.index),
]

views.py文件中的index视图函数负责接收请求并打印相关信息。


from django.shortcuts import render, HttpResponse

def index(request):
 print(request.body)
 """
 当post请求的请求体以data为参数,发送过来的数据格式为:b'username=amy&password=123'
 当post请求的请求体以json为参数,发送过来的数据格式为:b'{"username": "amy", "password": "123"}'
 """
 print(request.headers)
 """
 当post请求的请求体以data为参数,Content-Type为:application/x-www-form-urlencoded
 当post请求的请求体以json为参数,Content-Type为:application/json
 """
 return HttpResponse("ok")

在另一个独立的Python脚本中,向http://127.0.0.1:8080/index/发送POST请求,并通过打印request.body来观察data和json参数在发送数据时的格式差异。

示例脚本example1.py的代码如下。


import requests

r1 = requests.post(
 url="http://127.0.0.1:8089/index/",
 data={
  "username": "amy",
  "password": "123"
 }

 # data='username=amy&password=123'

 # json={
 #  "username": "amy",
 #  "password": "123"
 # }

 # json='username=amy&password=123'
)
print(r1.text)

以上即为Python requests.post方法中data与json参数区别的详细解析,希望能为读者提供有效的参考,欢迎继续支持本站获取更多技术分享。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。