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基础教程之udp端口扫描
Feb 10 Python
python连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
浅析Python中signal包的使用
Nov 13 Python
python下载图片实现方法(超简单)
Jul 21 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
Aug 16 Python
分享Python切分字符串的一个不错方法
Dec 14 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
Python2和Python3中@abstractmethod使用方法
Feb 04 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
Python正则表达式如何匹配中文
May 27 Python
Python基于pillow库实现生成图片水印
Sep 14 Python
Python截图并保存的具体实例
Jan 14 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/10/12 PHP
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
php发送post请求函数分享
2014/03/06 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
python ip正则式
2009/05/07 Python
Python 文件读写操作实例详解
2014/03/12 Python
Windows下安装python2.7及科学计算套装
2015/03/05 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
利用Hyperic调用Python实现进程守护
2018/01/02 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
Python爬取梨视频的示例
2021/01/29 Python
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
材料成型专业个人求职信范文
2013/09/25 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
股权收购意向书
2014/04/01 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
Python3中最常用的5种线程锁实例总结
2021/07/07 Python