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操作MySQL数据库的方法分享
May 29 Python
python解析中国天气网的天气数据
Mar 21 Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 Python
python和ruby,我选谁?
Sep 13 Python
NumPy.npy与pandas DataFrame的实例讲解
Jul 09 Python
Django代码性能优化与Pycharm Profile使用详解
Aug 26 Python
深入浅析Python中的迭代器
Jun 04 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
Python requests模块cookie实例解析
Apr 14 Python
python3实现飞机大战
Nov 29 Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 Python
总结Python常用的魔法方法
May 25 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重定向的三种方法分享
2012/02/22 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
JS实现li标签的删除
2019/04/12 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
Python计算三维矢量幅度的方法
2015/06/15 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
Python3处理HTTP请求的实例
2018/05/10 Python
Python补齐字符串长度的实例
2018/11/15 Python
Django之模型层多表操作的实现
2019/01/08 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
python文字转语音实现过程解析
2019/11/12 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
入党申请书自我鉴定
2013/10/12 职场文书
集体生日活动方案
2014/08/18 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript
JavaScript异步操作中串行和并行
2021/11/20 Javascript
Python实现照片卡通化
2021/12/06 Python
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏