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中的数据类型
May 05 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
python数据分析数据标准化及离散化详解
Feb 26 Python
python 字典中取值的两种方法小结
Aug 02 Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 Python
Python函数和模块的使用总结
May 20 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
Python shelve模块实现解析
Aug 28 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 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语法小结之基础和变量
2015/11/22 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
学习jQuey中的return false
2015/12/18 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
jQuery实现穿梭框效果
2021/01/19 jQuery
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Python 深入理解yield
2008/09/06 Python
Python subprocess模块详细解读
2018/01/29 Python
详解python pandas 分组统计的方法
2019/07/30 Python
Python中Unittest框架的具体使用
2019/08/27 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
护士优质服务演讲稿
2014/08/26 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
公路施工安全责任书
2015/05/08 职场文书