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中fileno()方法的使用
May 24 Python
python算法表示概念扫盲教程
Apr 13 Python
Django admin美化插件suit使用示例
Dec 12 Python
创建Django项目图文实例详解
Jun 06 Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 Python
Python中断多重循环的几种方式详解
Feb 10 Python
Python使用sqlite3模块内置数据库
May 07 Python
Django中FilePathField字段的用法
May 21 Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 Python
Python3接口性能测试实例代码
Jun 20 Python
Python编程源码报错解决方法总结经验分享
Oct 05 Python
pytest实现多进程与多线程运行超好用的插件
Jul 15 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
DSP接收机前端设想
2021/03/02 无线电
php重定向的三种方法分享
2012/02/22 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
详解RequireJs官方使用教程
2017/10/31 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
原生js实现分页效果
2020/09/23 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
使用Python & Flask 实现RESTful Web API的实例
2017/09/19 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
python2和python3哪个使用率高
2020/06/23 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
安全检查与奖惩制度
2014/01/23 职场文书
会计学专业自荐信
2014/06/25 职场文书
环卫个人总结
2015/03/03 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server