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抓取网页图片示例(python爬虫)
Apr 27 Python
python解决网站的反爬虫策略总结
Oct 26 Python
Python实现简单的四则运算计算器
Nov 02 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
python使用生成器实现可迭代对象
Mar 20 Python
python tkinter实现界面切换的示例代码
Jun 14 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 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
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
PHP7 标准库修改
2021/03/09 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
asp 取文本框名称代码
2008/12/02 Javascript
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
Python中itertools模块用法详解
2014/09/25 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
Python callable()函数用法实例分析
2018/03/17 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
使用Python进行目录的对比方法
2018/11/01 Python
python实现对输入的密文加密
2019/03/20 Python
django删除表重建的实现方法
2019/08/28 Python
Python能做什么
2020/06/02 Python
运行Python编写的程序方法实例
2020/10/21 Python
小学新学期教师寄语
2014/01/18 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
流动人口婚育证明
2014/10/19 职场文书
幼儿教师辞职信
2015/02/27 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书