在http 协议中,post 提交的数据需放在消息主体的,但协议并没有规定必须使用什么编码方式,从而导致了提交方式的不同。本文记录 form 表单、json和文件三种post方式。
简介 {#简介}
在 http
协议中,post
提交的数据需放在消息主体的,但协议并没有规定必须使用什么编码方式,从而导致了提交方式的不同。服务端根据请求同一种的 Content-Type 字段来获取请求中消息主体是用何种方式进行编码,再对消息主体进行解析。
具体的编码方式有:
- application/x-www-form-urlencoded # 以
form
表单形式提交数据,最常见也是大家最熟悉的 - application/json # 以
json
串提交数据。 - multipart/form-data # 上传文件
提交Form 表单 {#提交Form-表单}
"Content-Type": "application/x-www-form-urlencoded"
requests
提交Form表单,一般存在于网站的登录,用来提交用户名和密码。以 http://httpbin.org/post 为例,在 requests
中,以 form
表单形式发送 post
请求,只需要将请求的参数构造成一个字典,然后传给requests.post()
的 data
参数即可。
代码如下:
输出效果如下:
httpbin.org 网站可以显示你提交请求的内容,输出的"Content-Type":"application/x-www-form-urlencoded",证明这是提交Form的方式。
提交json串 {#提交json串}
"Content-Type": "application/json"
对于提交json串,主要是用于发送ajax请求中,动态加载数据。
写法一 {#写法一}
把data进行json编码,再发送。
写法二 {#写法二}
处理将data主动编码为json发送之外,requests还提供了一个json参数,自动使用json方式发送,而且在请求头中也不用显示声明 'Content-Type':'application/json; charset=UTF-8'。
上传文件 {#上传文件}
"Content-Type": "application/x-www-form-urlencoded"
Content-Type类型为multipart/form-data,以multipart形式发送post请求,只需将一文件传给 requests.post() 的files参数即可。
参考资料 {#参考资料}
文章链接:
https://www.zywvvd.com/notes/coding/python/python-post/python-post/