Python 使用requests发送POST请求总结
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/junli_chen/article/details/53670887
一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样:
请求行
请求报头
消息主体
HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。服务端通过是根据请求头中的Content-Type字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析。具体的编码方式包括:
- application/x-www-form-urlencoded
最常见post提交数据的方式,以form表单形式提交数据。 - application/json
以json串提交数据。 - multipart/form-data
一般使用来上传文件。
2.7.1 以form形式发送post请求
Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data
参数即可。
# -*- coding: utf-8 -*-
import requests
import jsondef send_requests1():url = 'http://httpbin.org/post'd = {'key1': 'value1', 'key2': 'value2'}r = requests.post(url, data=d)return rdef send_requests2():url = 'http://httpbin.org/post's = json.dumps({'key1': 'value1', 'key2': 'value2'})r = requests.post(url, data=s)return rdef send_requests3():url = 'http://httpbin.org/post'files = {'file': open('report.txt', 'rb')}r = requests.post(url, files=files)return rif __name__ == "__main__":response1 = send_requests1()print '------ response1.text = ', response1.text# response2 = send_requests2()# print '------ response2.text = ', response2.text## response3 = send_requests3()# print '------ response3.text = ', response3.text
------ response1.text = {"args": {}, "data": "", "files": {}, "form": {"key1": "value1", "key2": "value2"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "23", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.1"}, "json": null, "origin": "220.194.45.154, 220.194.45.154", "url": "https://httpbin.org/post"
}
可以看到,请求头中的Content-Type字段已设置为application/x-www-form-urlencoded,且
d = {'key1': 'value1', 'key2': 'value2'}
以form表单的形式提交到服务端,服务端返回的form字段即是提交的数据。
2.7.2 以json形式发送post请求
可以将一json串传给requests.post()的data参数
# -*- coding: utf-8 -*-
import requests
import jsondef send_requests1():url = 'http://httpbin.org/post'd = {'key1': 'value1', 'key2': 'value2'}r = requests.post(url, data=d)return rdef send_requests2():url = 'http://httpbin.org/post's = json.dumps({'key1': 'value1', 'key2': 'value2'})r = requests.post(url, data=s)return rdef send_requests3():url = 'http://httpbin.org/post'files = {'file': open('report.txt', 'rb')}r = requests.post(url, files=files)return rif __name__ == "__main__":# response1 = send_requests1()# print '------ response1.text = ', response1.textresponse2 = send_requests2()print '------ response2.text = ', response2.text## response3 = send_requests3()# print '------ response3.text = ', response3.text
------ response2.text = {"args": {}, "data": "{\"key2\": \"value2\", \"key1\": \"value1\"}", "files": {}, "form": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "36", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.1"}, "json": {"key1": "value1", "key2": "value2"}, "origin": "220.194.45.154, 220.194.45.154", "url": "https://httpbin.org/post"
}
可以看到,请求头的Content-Type设置为application/json,并将s
这个json串提交到服务端中。
2.7.3 以multipart形式发送post请求
Requests也支持以multipart形式发送post请求,只需将一文件传给requests.post()的files
参数即可。
# -*- coding: utf-8 -*-
import requests
import jsondef send_requests1():url = 'http://httpbin.org/post'd = {'key1': 'value1', 'key2': 'value2'}r = requests.post(url, data=d)return rdef send_requests2():url = 'http://httpbin.org/post's = json.dumps({'key1': 'value1', 'key2': 'value2'})r = requests.post(url, data=s)return rdef send_requests3():url = 'http://httpbin.org/post'files = {'file': open('report.txt', 'rb')}r = requests.post(url, files=files)return rif __name__ == "__main__":# response1 = send_requests1()# print '------ response1.text = ', response1.text# response2 = send_requests2()# print '------ response2.text = ', response2.textresponse3 = send_requests3()print '------ response3.text = ', response3.text
------ response3.text = {"args": {}, "data": "", "files": {"file": "hello word!\n"}, "form": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "158", "Content-Type": "multipart/form-data; boundary=0562a8553c254ba298a69aa9e7fb477e", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.1"}, "json": null, "origin": "220.194.45.154, 220.194.45.154", "url": "https://httpbin.org/post"
}
文本文件report.txt的内容只有一行:Hello world!,从请求的响应结果可以看到数据已上传到服务端中。
Python 使用requests发送POST请求总结相关推荐
- Python 技术篇-requests发送post请求传文件给flask服务端报405、400问题解决方法
这是我 flask 服务端的一块代码,可以看到有个 methods=['GET', 'POST'],如果没有这个参数,发送请求就会报 405,因为默认能只接收到 get 请求,接收不到 post 请求 ...
- Python 使用requests发送POST请求
一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样: 请求行 请求报头 消息主体 HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码 ...
- Python接口测试- requests 发送 post 请求的几种方法
目录 前言: 发送 json 格式的数据 前言: 想了解更多相关知识请关注我吧!或者点击这里领取全套[软件测试/自动化测试]海量资料免费领取 POST 请求用于向服务器发送数据.与 get 相比更安 ...
- python post请求实例_Python使用requests发送POST请求实例代码
本文研究的主要是Python使用requests发送POST请求的相关内容,具体介绍如下. 一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样: 请求行 请求报头 消息主体 ...
- Python 使用 Scrapy 发送 post 请求的坑
From:https://www.jb51.net/article/146769.htm 使用 requests 发送 post 请求 先来看看使用requests来发送post请求是多少好用,发送请 ...
- requests发送post请求的一些疑点
requests发送post请求的一些疑点 前言 在Python爬虫中,使用requests发送请求,访问指定网站,是常见的做法.一般是发送GET请求或者POST请求,对于GET请求没有什么好说的,而 ...
- requests发送http请求
requests发送http请求 发送请求:(数据获取.乱码解决) import requests response = requests.get('http://www.baidu.com') # ...
- python绘制蚊香形_Python requests发送post请求的一些疑点
前言 在Python爬虫中,使用requests发送请求,访问指定网站,是常见的做法.一般是发送GET请求或者POST请求,对于GET请求没有什么好说的,而发送POST请求,有很多朋友不是很清楚,主要 ...
- python+pytest接口自动化框架(5)-requests发送post请求
在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体(request body)中传递. 且协议中并没有规定post请求的请求数据必须使用什么样的编码方式 ...
最新文章
- 敏捷(Agile)与精益(Lean)对比
- Web 2.0背后的长尾理论
- 使用PowerDbg自动化Windbg调试过程
- c语言删除文件第一行_ElasticSearch 文档的删除和批量操作
- Qt网络编程之实例一GET方式
- figtree需要在JAVA下运行吗_Phylogenomic_Tutorial || ML_Tree inference
- SI4463模块配合WDS的快速上手指南
- ArrayList理解(1)初始化
- 1006: 组合的输出(dfs的一种用法)(与排列类似)
- 三.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---1.项目文件介绍(除主要源码部分)
- 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin
- 死链提交为什么不能提交 html文件,百度提交网站后死链一直未处理掉的原因有哪些?...
- android 两列菜单,【Android】实战开发之ListView同一个item显示2列的实现方法(仿2列商品列表)...
- pbrt1 Introduction
- 多商家父订单子订单_70多份订单被退回,商家查看信息傻眼了,美团:封店180天...
- 后羿采集器怎么导出数据_后羿采集器如何采集亚马逊评论
- python查阅文献
- sql server 数据库中null 转换为 0
- CSS 文字内容底部对齐
- LINUX kernel clock系统,基于内核4.4
热门文章
- mysql操作中 出现You can‘t specify target table for update in FROM clause错误的解决方法
- 迪威视讯:成为中国IDC落地重要力量
- 凝汽式汽轮机调节系统
- 微信小程序背景图片完全覆盖显示
- 生源985占比100%,北大叉院这个专业本校学生也心仪~
- 手机测试陨石软件,不用仪器检测,肉眼就能教你辨别你手上的陨石!
- 【数学】【2017.7.7普及】串
- Unity 2D随机地图
- SpringBoot:yaml配置注入bean
- 比KMP算法更简单更快的字符串匹配算法