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中使用ConfigParser解析ini配置文件实例
Aug 30 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
Jul 27 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
Pycharm简单使用教程(入门小结)
Jul 04 Python
python写入文件自动换行问题的方法
Jul 05 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
Python二元赋值实用技巧解析
Oct 25 Python
python主要用于哪些方向
Jul 05 Python
Python 忽略文件名编码的方法
Aug 01 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开启opcache提升代码性能
2015/04/26 PHP
非常实用的php验证码类
2016/05/15 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
简单的js表格操作
2016/09/24 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
express.js中间件说明详解
2019/03/19 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Django User 模块之 AbstractUser 扩展详解
2020/03/11 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
客服部班长工作责任制
2014/02/25 职场文书
投标诚信承诺书
2014/05/26 职场文书
扬尘污染防治方案
2014/06/15 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript