今天就跟大家聊聊有关如何在python中使用请求上传多个文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<强> 1,需要的环境强>
Python2。请求库X
<强> 2,单字段发送单个文件强>
在请求中发送文件的接口只有一种,那就是使用请求。发布的文件参数,请求形式如下:
url =,“http://httpbin.org/post",, 时间=data None files =, {,,,}, r =, requests.post (url,数据,文件=文件)
而这个文件参数是可以接受很多种形式的数据,最基本的2种形式为:
字典类型
元组列表类型
<强> 2.1,字典类型的文件参数强>
官方推荐使用的字典参数格式如下:
{, ,“field1":, (“filename1",,开放(“filePath2",,“rb")),, ,“field2":, (“filename2",,开放(“filePath3",,“rb"),,“图像/jpeg"),, ,“field3":, (“filename3",,开放(“filePath4",,“rb"),,“图像/jpeg",, {“refer",:,“localhost"}), }
这个字典的关键就是发送帖子请求时的字段名,而字典的价值则描述了准备发送的文件的信息;从上面可以看出价值可以是2元组,3元组或4元组;
这个元组的每一个字段代表的意思一次为:
(“filename",,“fileobject",,“content-type",,“headers")
缺省的话则会使用默认值
除了上面的使用形式,其实请求还是支持一个更简洁的参数形式,如下
{, ,“field1":,开放(“filePath2",,“rb")), ,“field2":,开放(“filePath3",,“rb")), ,“field3":,开放(“filePath4",,“rb")), }
这种形式的参数其等同效果如下,其中文件名是filepath的文件名:
{, ,“field1":, (“filename1",,开放(“filePath2",,“rb")),, ,“field2":, (“filename2",,开放(“filePath3",,“rb")),, ,“field3":, (“filename3",,开放(“filePath4",,“rb")), }
当然,你还可以这样发送一个文件请求
{, ,“field1":,开放(“filePath2",,“rb") .read ()), }
这里的文件名的值为field1
<强> 2.2,元组列表类型的文件参数强>
其实元组列表的形式与字典的形式基本一样,除了最外层的包装不一样;而在请求内部最终会把字典参数形式转换为元组列的形式。官网推荐的用法如下:
(, ,(“field1",:, (“filename1",,开放(“filePath2",,“rb"))),, ,(“field2",:, (“filename2",,开放(“filePath3",,“rb"),,“图像/jpeg")),, ,(“field3",:, (“filename3",,开放(“filePath4",,“rb"),,“图像/jpeg",, {“refer",:,“localhost"})), )
列表里面的子项可以是元组,也可以是列表;同样这里也支持简介的形式,如下:
(, ,(“field1",:,开放(“filePath2",,“rb"))), # # filename 使用的是filepath的文件名, ,(“field2",:,开放(“filePath3",,“rb") .read ())), # # filename 使用的是键值,即,field2 )
<强> 3,单字段发送多个文件【即上传文件时,设置为多选了】强>
<强> 3.1,字典参数形式强>
{, ,“field1",:,“, ,,(“filename1",,开放(“filePath2",,“rb")),, ,,(“filename2",,开放(“filePath3",,“rb"),,“图像/png"),, ,才能打开(“filePath4",,“rb"),, ,才能打开(“filePath5",,“rb") .read (), ),才能 }
<强> 3.2,元组列表形式强>
(, ,(“field1",,, (“filename1",,开放(“filePath2",,“rb"))),, ,(“field1",,, (“filename2",,开放(“filePath3",,“rb"),,“图像/png")),, ,(“field1",,,开放(“filePath4",,“rb")),, ,(“field1",,,开放(“filePath5",,“rb") .read ()), )
上面2种形式发送的请求,所有的文件都会在同一个字段下,后台服务只要从field1字段就可以获取全部的文件对象
<强> 4,同时发送普通数据字段强>
上面介绍的是使用发送文件内容请求,而有时候我们在发送文件的同时还需要发送普通的数据字段,此时普通数据字段直接存在数据参数中即可,如下:
data =, {“k1",:,“v1"},=,{files ,“field1":,开放(“1. png",,“rb"), }, null如何在python中使用请求上传多个文件