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中使用pyhook实现键盘监控的例子
Jul 18 Python
VSCode下好用的Python插件及配置
Apr 06 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
基于python-opencv3的图像显示和保存操作
Jun 27 Python
python conda操作方法
Sep 11 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
python 图像插值 最近邻、双线性、双三次实例
Jul 05 Python
Selenium及python实现滚动操作多种方法
Jul 21 Python
python matlab库简单用法讲解
Dec 31 Python
python中yield的用法详解
Jan 13 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
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Saltstack快速入门简单汇总
2016/03/01 Python
Python之文字转图片方法
2018/05/10 Python
基于python指定包的安装路径方法
2018/10/27 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
内衣营销方案
2014/03/15 职场文书
补充协议书范本
2014/04/23 职场文书
讲解员培训方案
2014/05/04 职场文书
承诺书模板
2014/08/30 职场文书
趣味运动会广播稿
2014/09/13 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang