POST请求发送的表单数据和json数据的区别及python代码实现

前言

这篇博客会介绍最常见post 请求form表单数据json数据
数据类型之间的区别
urllib代码的实现(python)
requests库实现
以及如何使用postman软件发送这些类型数据

下面所有请求的例子,我都会用到一个接口:http://httpbin.org/post
这个接口可以返回提交的数据类型以及请求头信息


数据类型

这里说一个重要的请求头的参数 Content-Type
这个请求头中的参数的作用就是 后端会根据这个字段来解析你提交过去的数据类型,所以代码请求的时候的时候最好将这个字段填写(postman会根据你写入的数据类型自动填写)

1.表单数据

Content-Type: application/x-www-form-urlencoded
简介: 这种数据类型是最常见的,html不依靠js就可以简单实现一个简单的form表单数据提交
数据格式:a=1&b=2
代码实现:

import urllib.parse
import urllib.request
url ="http://httpbin.org/post"
data = {
    "a":"1",
    "b":"2",
}
data = urllib.parse.urlencode(data).encode() 
req = urllib.request.Request(url,data=data,method='POST')
# req.add_header("Content-Type","application/x-www-form-urlencoded") #这里我将添加请求头信息注释也可请求成功,因为默认解析就是表单数据
response = urllib.request.urlopen(req)
print(response.read().decode())

这里我用的是python原生的网络请求库,用这种较为底层的代码演示这个例子,才能更好的说明提交的数据类型差异

注意:
1.经过urllib.parse.urlencode(data)这个函数转换可以将字典的数据类型转换为a=1&b=2
2.所有的post请求提交的数据类型都是字节型数据,也就是要经过encode()

postman提交:
在这里插入图片描述
切换到 headers 分栏里面可以看到值已经自动填写了
在这里插入图片描述
跟我们前面讲的一致
requests库代码简单实现

import requests
url ="http://httpbin.org/post"
data = {
    "a":"1",
    "b":"2",
}
response = requests.post(url,data=data)
print(response.text)
2.json数据

Content-Type: application/json
简介: json数据是js中的一个概念,本质其实就是字符串,只不过这个字符串的内容类似于python中的字典,也是键值对的格式
数据格式:'{"a":"1","b":"2"}'
代码实现:

import urllib.parse
import urllib.request
import json
url ="http://httpbin.org/post"
data = {
    "a":"1",
    "b":"2",
}

data = json.dumps(data).encode() 
req = urllib.request.Request(url,data=data,method='POST')
req.add_header("Content-Type","application/json") #这里就必须填写了,不填写后端不会按照json去解析
response = urllib.request.urlopen(req)
print(response.read().decode())

这里提交的也可以直接提交字符串(你写的必须是标准的json字符串),不过也是需要encode的,这里我传递一个字典,通过json.dumps将字典转换成一个标准的json字符串

注意:
1.需要加入Content-Type 请求头参数,告诉后端这是一个json 数据类型

postman提交:
在这里插入图片描述
这里简单说一下这个postman这个 raw提交,其实你只要知道各种数据类型格式 以及对应的Content-Type格式,无论form表单数据还是json字符串数据都可以通过raw这个项来提交

比如 提交form表单形式,你可以在里面写a=1&b=2,然后将Content-Type 改为application/x-www-form-urlencoded 然后提交,(其实下拉栏里面的text,json,html,xml作用就是判断你输入的数据类型是否合法还有自动设置Content-Type)
requests库代码简单实现

import requests
url ="http://httpbin.org/post"
data = {
    "a":"1",
    "b":"2",
}
response = requests.post(url,json=data)
print(response.text)

不的不说 requests 库是真的方便,只需要更改一个参数就可以将发送的数据类型由表单数据变为json,但是正是因为方便,很多人都不知道这个库背后做了多少复杂的工作,也不知道json的数据类型和form表单数据类型的区别

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello_wshuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值