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 列表(List)操作方法详解
Mar 11 Python
python使用百度翻译进行中翻英示例
Apr 14 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
Python中fnmatch模块的使用详情
Nov 30 Python
python使用suds调用webservice接口的方法
Jan 03 Python
Django model update的多种用法介绍
Mar 28 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
Python pandas.DataFrame 找出有空值的行
Sep 09 Python
python numpy中cumsum的用法详解
Oct 17 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 Python
python如何查看安装了的模块
Jun 23 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下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
[原创]pip和pygal的安装实例教程
2017/12/07 Python
python正则表达式之对号入座篇
2018/07/24 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
python匿名函数的使用方法解析
2019/10/10 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
策划总监岗位职责
2014/02/16 职场文书
吃空饷专项治理工作实施方案
2014/03/04 职场文书
人事部岗位职责范本
2014/03/05 职场文书
《搭石》教学反思
2014/04/07 职场文书
本科生自荐信
2014/06/18 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
KTV员工管理制度
2015/08/06 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
pytorch 实现变分自动编码器的操作
2021/05/24 Python
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
Java如何实现树的同构?
2021/06/22 Java/Android