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

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

本文详解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 相关产品和应用

全部下载

专题列表