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表单数据类型的区别
POST请求发送的表单数据和json数据的区别及python代码实现的更多相关文章
- 扩展JQUERY 表单加载JSON数据
$.fn.extend({ //表单加载json对象数据 setForm : function (jsonValue) { var obj = this; $.each(jsonValue, func ...
- 将form表单转化为json数据
参考地址:https://github.com/hongymagic/jQuery.serializeObject
- 如何发送HTML表单数据
多数时候,HTML表单的目的只是为了把数据发给服务器,之后服务器再处理这些数据并发送响应给用户.虽然看起来挺简单的,但我们还是得注意一些事情以确保传送的数据不会破坏服务器.或者给你的用户制造麻烦. 数 ...
- 【ASP.NET Web API教程】5.3 发送HTML表单数据:文件上传与多部分MIME
原文:[ASP.NET Web API教程]5.3 发送HTML表单数据:文件上传与多部分MIME 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面 ...
- 【ASP.NET Web API教程】5.2 发送HTML表单数据:URL编码的表单数据
原文:[ASP.NET Web API教程]5.2 发送HTML表单数据:URL编码的表单数据 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...
- (转)WebApi发送HTML表单数据:文件上传与多部分MIME
5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/282 ...
- WebApi发送HTML表单数据:文件上传与多部分MIME
5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/282 ...
- 什么是请求参数、表单参数、url参数、header参数、Cookie参数?一文讲懂
最近在工作中对 http 的请求参数解析有了进一步的认识,写个小短文记录一下. 回顾下自己的情况,大概就是:有点点网络及编程基础,只需要加深一点点对 HTTP 协议的理解就能弄明白了. 先分享一个小故 ...
- 雷林鹏分享:jQuery EasyUI 表单 - 过滤下拉数据网格
jQuery EasyUI 表单 - 过滤下拉数据网格 下拉数据网格(Combogrid)组件和下拉框(Combobox)组件的共同点是,除了都具有下拉面板以外,它们都是基于数据网格(Datagrid ...
- java post请求的表单提交和json提交简单小结
在java实现http请求时有分为多种参数的传递方式,以下给出通过form表单提交和json提交的参数传递方式: public String POST_FORM(String url, Map< ...
随机推荐
- python 模块、原始字符串
模块 三种方法: import from 模块 import 成员,成员 from 模块 import * *代表所有的成员 隐藏成员: 模块中以下划线_开头的属性 隐藏成员不会被from 模块 im ...
- kali安装vscode(deb包)
如果在虚拟机下安装,则你可以在主机下载,然后复制到具有可读可写的文件夹,比如root用户的话就在/root下面 打开终端,切换到软件终端,输入安装命令dpkg -i code...按table键自动补 ...
- UEC++ 接口
词义广泛,用来陈述功能,选项,与其他程序结构进行沟通的方式.接口抽象出了交互结构,提供了两个未知逻辑交互的便捷性.对于编程中,如何更好的设计低耦合程序起到了至关重要的作用.设计者可以在互不关心的情况下 ...
- Kubernetes的kubectl常用命令速记
文章转载自:https://mp.weixin.qq.com/s/0kqQzeA-MzCOhPMkmiR4_A kubectl是用来管理Kubernetes集群的命令行工具. kubectl默认在&q ...
- 在 Linux 上安装服务器管理软件 Cockpit
Cockpit 是一个自由开源的服务器管理软件,它使得我们可以通过它好看的 web 前端界面轻松地管理我们的 GNU/Linux 服务器.Cockpit 使得 linux 系统管理员.系统维护员和开发 ...
- 计算机三大硬件和操作系统以及python解释器
今日分享内容概要 计算机五大组成部分详解 计算机三大核心硬件 操作系统 编程与编程语言 编程语言的发展历史 编程语言的分类 python解释器 python解释器多版本共存 分享详细 计算机五大组成部 ...
- POJ1651 Multiplication Puzzle (区间DP)
这道题的妙处在于把原问题看成矩阵连乘问题,求这些矩阵相乘的最小乘法次数,比如一个i*k矩阵乘一个k*j的矩阵,他们的乘法次数就是i*k*j (联想矩阵乘法的三层循环),题目说的取走一张牌,类似于矩阵相 ...
- 从0搭建vue3组件库:Shake抖动组件
先看下效果 其实就是个抖动效果组件,实现起来也非常简单.之所以做这样一个组件是为了后面写Form表单的时候会用到它做一个规则校验,比如下面一个简单的登录页面,当点击登录会提示用户哪个信息没输入,当然这 ...
- 【ps下载与安装】Adobe Photoshop 2022 for Mac v23.5 中文永久版下载 Ps图像编辑软件
Adobe Photoshop 2022 mac破解版,是一款Ps图像编辑软件,同时支持M1/M2芯片和Intel芯片安装,此主要的更新包括多个新增和改进的功能,例如改进的对象选择工具,其悬停功能可预 ...
- C语言爱心表白程序
#include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> ...