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之编写类之一创建实例
Oct 11 Python
举例讲解Python程序与系统shell交互的方式
Apr 09 Python
Python计算一个文件里字数的方法
Jun 15 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
基于Python爬虫采集天气网实时信息
Jun 05 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通过ajax实现双击table修改内容
2014/04/28 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
javascript实现动态标签云
2015/10/16 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
Python批量按比例缩小图片脚本分享
2015/05/21 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
临床医学应届生求职信
2013/11/06 职场文书
小学后勤管理制度
2014/01/14 职场文书
三年级语文教学反思
2014/02/01 职场文书
社团招新策划书
2014/02/04 职场文书
村委会换届选举方案
2014/05/03 职场文书
体育之星事迹材料
2014/05/11 职场文书
提拔干部考察材料
2014/05/26 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
入党积极分子考察意见
2015/06/02 职场文书
导游词之广西漓江
2019/11/02 职场文书