python实现requests发送/上传多个文件的示例


Posted in Python onJune 04, 2018

1、需要的环境

Python2.X
Requests 库

2、单字段发送单个文件

在requests中发送文件的接口只有一种,那就是使用requests.post的files参数, 请求形式如下:

url = "http://httpbin.org/post" 
data = None 
files = { ... } 
r = requests.post(url, data, files=files)

而这个files参数是可以接受很多种形式的数据,最基本的2种形式为:

字典类型

元组列表类型

2.1、字典类型的files参数

官方推荐使用的字典参数格式如下:

{ 
 "field1" : ("filename1", open("filePath1", "rb")), 
 "field2" : ("filename2", open("filePath2", "rb"), "image/jpeg"), 
 "field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"}) 
}

这个字典的key就是发送post请求时的字段名, 而字典的value则描述了准备发送的文件的信息;从上面可以看出value可以是2元组,3元组或4元组;

这个元组的每一个字段代表的意思一次为:

("filename", "fileobject", "content-type", "headers")

缺省的话则会使用默认值

除了上面的使用形式,其实requests还是支持一个更简洁的参数形式,如下

{ 
 "field1" : open("filePath1", "rb")), 
 "field2" : open("filePath2", "rb")), 
 "field3" : open("filePath3", "rb")) 
}

这种形式的参数其等同效果如下, 其中filename是filepath的文件名:

{ 
 "field1" : ("filename1", open("filePath1", "rb")), 
 "field2" : ("filename2", open("filePath2", "rb")), 
 "field3" : ("filename3", open("filePath3", "rb")) 
}

当然,你还可以这样发送一个文件请求

{ 
 "field1" : open("filePath1", "rb").read()) 
}

这里的filename的值为field1

2.2、元组列表类型的files参数

其实元组列表的形式与字典的形式基本一样,除了最外层的包装不一样;而在requests内部最终会把字典参数形式 转换 为 元组列的形式。官网推荐的用法如下:

[ 
 ("field1" : ("filename1", open("filePath1", "rb"))), 
 ["field2" : ("filename2", open("filePath2", "rb"), "image/jpeg")], 
 ("field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"})) 
]

列表里面的子项可以是元组,也可以是列表;同样这里也支持简介的形式,如下:

[ 
 ("field1" : open("filePath1", "rb"))), ##filename 使用的是filepath的文件名 
 ("field2" : open("filePath2", "rb").read())) ##filename 使用的是键值,即 field2 
]

3、单字段发送多个文件【即上传文件时,设置为多选了】

3.1、字典参数形式

{ 
 "field1" : [ 
   ("filename1", open("filePath1", "rb")), 
   ("filename2", open("filePath2", "rb"), "image/png"), 
   open("filePath3", "rb"), 
   open("filePath4", "rb").read() 
  ] 
}

3.2、元组列表形式

[ 
 ("field1" , ("filename1", open("filePath1", "rb"))), 
 ("field1" , ("filename2", open("filePath2", "rb"), "image/png")), 
 ("field1" , open("filePath3", "rb")), 
 ("field1" , open("filePath4", "rb").read()) 
]

上面2种形式发送的请求,所有的文件都会在同一个字段下,后台服务只要从field1字段就可以获取全部的文件对象

4、同时发送普通数据字段

上面介绍的是使用发送文件内容请求,而有时候我们在发送文件的同时还需要发送普通的数据字段,此时普通数据字段直接存在data参数中即可,如下:

data = {"k1" : "v1"} 
files = { 
 "field1" : open("1.png", "rb") 
} 
r = requests.post("http://httpbin.org/post", data, files=files)

以上这篇python实现requests发送/上传多个文件的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python将xml xsl文件生成html文件存储示例讲解
Dec 03 Python
Python实现115网盘自动下载的方法
Sep 30 Python
python通过openpyxl生成Excel文件的方法
May 12 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
pandas 对日期类型数据的处理方法详解
Aug 08 Python
简单介绍python封装的基本知识
Aug 10 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
python实现二分查找算法
Sep 18 Python
用python批量下载apk
Dec 29 Python
详解python的变量缓存机制
Jan 24 Python
Pytest中skip skipif跳过用例详解
Jun 30 Python
python3写的简单本地文件上传服务器实例
Jun 04 #Python
Python装饰器的执行过程实例分析
Jun 04 #Python
使用Python监控文件内容变化代码实例
Jun 04 #Python
Python操作mongodb的9个步骤
Jun 04 #Python
Python中property函数用法实例分析
Jun 04 #Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 #Python
python最长回文串算法
Jun 04 #Python
You might like
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
javascript中 try catch用法
2015/08/16 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
对angular4子路由&辅助路由详解
2018/10/09 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
pandas实现选取特定索引的行
2018/04/20 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
Myholidays美国:在线旅游网站
2019/08/16 全球购物
医护人员英文求职信范文
2013/11/26 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js