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赋值操作方法分享
Mar 23 Python
python二分查找算法的递归实现方法
May 12 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
查看Django和flask版本的方法
May 14 Python
python3使用smtplib实现发送邮件功能
May 22 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
python 求某条线上特定x值或y值的点坐标方法
Jul 09 Python
Python实现Mysql数据统计及numpy统计函数
Jul 15 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 Python
python解析json数据
Apr 29 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 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
php开发环境配置记录
2011/01/14 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
php类的定义与继承用法实例
2015/07/07 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
chrome原生方法之数组
2011/11/30 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
JS实现密码框效果
2020/09/10 Javascript
python设置windows桌面壁纸的实现代码
2013/01/28 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
python:print格式化输出到文件的实例
2018/05/14 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
2019/12/11 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
Django配置跨域并开发测试接口
2020/11/04 Python
10个示例带你掌握python中的元组
2020/11/23 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
水污染治理专业毕业生推荐信
2013/11/14 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
《鲁滨逊漂流记》之六读后感(4篇)
2019/09/29 职场文书
python保存图片的四个常用方法
2022/02/28 Python
Go语言安装并操作redis的go-redis库
2022/04/14 Golang
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技