Python模拟实现multipart/form-data格式上传图片文件

 

一、单字段发送单个文件

url = "http://httpbin.org/post"
data = None
files = { ... }
r = requests.post(url, data, files=files)

而这个files参数是可以接受很多种形式的数据,最基本的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元组

 

缺省的话则会使用默认值。除了上面的使用形式,其实requests还是支持一个更简洁的参数形式,如下

{

"field1" : open("filePath1", "rb"),

"field2" : open("filePath2", "rb"),

"field3" : open("filePath3", "rb")

}


{
  "field1" : ("filename1", open("filePath1", "rb")),
  "field2" : ("filename2", open("filePath2", "rb")),
  "field3" : ("filename3", open("filePath3", "rb"))

}

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
]


二、单字段发送多个文件,即上传文件时,设置为多选了

2.1、字典参数形式

{
  "field1" : [
                 ("filename1", open("filePath1", "rb")), 
                 ("filename2", open("filePath2", "rb"), "image/png"), 
                 open("filePath3", "rb"),
                 open("filePath4", "rb").read()
               ]
}

2.2、元组列表形式

[
  ("field1" , ("filename1", open("filePath1", "rb"))),
  ("field1" , ("filename2", open("filePath2", "rb"), "image/png")), 
  ("field1" , open("filePath3", "rb")),
  ("field1" , open("filePath4", "rb").read())
]
 

 

 

三、上传单张图片实例:

3.1、用fiddler抓包,查看接口请求格式和图片传参格式:

Content-Type:multipart/form-data

Content-Type: image/png
Content-Disposition: form-data; name="file"; filename="file.png"

3.2、上传图片

url='XXXXXXXXXXXXXX/1.0/bd/user/punch_clock'
files={"file": ("1.png", open(r"C:\Users\wangli\PycharmProjects\InterfaceAutomationTesting\case\1.png", "rb"), "image/png")}
headers={"Authorization":"bearereyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9vbnNpdGUtYXBpLnN0MS50ZXN0LmxhbnhpbmthLmNvbVwvMS4wXC9hZG1pblwvbWFuYWdlclwvbG9naW4iLCJpYXQiOjE1NTkxMjkzNjIsImV4cCI6MTU2MTgwNzc2MiwibmJmIjoxNTU5MTI5MzYyLCJqdGkiOiI4Y0VweGdnVDc3NjFwRkxnIiwic3ViIjoyMzUsInBydiI6IjA1NzdiNDFmNTRlMDk1YTNkOGNhMjM3NDM2NTAxYjhiN2IxZmU0YTQifQ.RUeRExypNq2sWY7CCOwH60xBEDgvRMytYKxEE2Ze35k"}
r=requests.post(url=url,headers=headers,files=files)
print(r.json())

 

四、上传图片实例:

4.1.上传图片以下这种格式:
-----------------------------22165374713946
Content-Disposition: form-data; name="localUrl"

yoyoketang.png
-----------------------------22165374713946
Content-Disposition: form-data; name="imgFile"; filename="yoyoketang.png"
Content-Type: image/png

2.写成字典格式,key对应name="imgFile"这里name对应的值

3.value里面是一个元组()

  • 第一个参数是filename=后面对应的值,没有就写None
  • 第二个是上面的这个值“”yoyoketang.png“”,或者是文件open打开的二进制流
  • 第三个是Content-Type对应的类型,如:"image/png"

f ={
"localUrl": (None,"1.png"),
"imgFile": ("1.png", open("d:\1.png", "rb"), "image/png")
}

# 上传图片

url1 = "http://127.0.0.1:81/zentao/file-ajaxUpload-5a26aca290b59.html?dir=image"

f ={ "localUrl": (None,"1.png"), "imgFile": ("1.png", open("d:\\1.png", "rb"), "image/png") }

r = s.post(url1, files=f)

 

五、上传图片实例:

url='http://ta.2boss.cn/rabbit/v1/user/addAdvise'
data={"advise":"测试上传图片","customerId":"47066750",
"images":["http:\/\/2boss.oss-cn-hangzhou.aliyuncs.com\/54a0e078e4f4588d4a6efdfafa8cc621.jpg",
          "http:\/\/2boss.oss-cn-hangzhou.aliyuncs.com\/82f7ad533662ca918f75035b8bc063f6.jpg"]}
headers={"TBSAccessToken":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGllbnRJZCI6ImY3NDA4MWUzLTVhYzgtNDRkNS05NWFlLWM1OGM0ZmRhOWEyNCIsInNjb3BlIjoiQ09OU1VNRVIiLCJpc3MiOiJodHRwOi8vbGl5b3UuY28iLCJleHAiOjE1NjE3Nzg0MjcsInVzZXJJZCI6OTUxNTMsImV4cGlyZXNBdCI6MTU2MTc3ODQyNzcyNX0.4ZKIhwgQTTqxabsLs9_wX5r-dkaULgqfA2ENhkSnZPo"}

r=requests.post(url=url,headers=headers,json=data)
print(r.json())

 

六、传多个附件

1.传多个文件的时候如下,这两个参数的name都是一样的,如果用字典去传key值,很显然python的key值是不能重复的

Content-Disposition: form-data; name="files[]"; filename="1.png"

Content-Type: image/png

Content-Disposition: form-data; name="files[]"; filename="2.png"

Content-Type: image/png

2.这时候需要换个格式,传list数据

# file = {

# "files[]": ("1.png", open("d:\\1.png", "rb"), "image/png"),

# "labels[]": "tu1",

# }

#-------------多个文件用list类型------------

file = [

("files[]", ("2.png", open("d:\\1.png", "rb"), "image/png")),

("labels[]", "tu1"),

("files[]", ("2.png", open("d:\\2.png", "rb"), "image/png")),

("labels[]", "tu2"),

]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tensorflow9-mnist手写数字识别进阶-多层神经网络建模

大圆为一个神经元模型 全连接:相邻的两层之间所有的结点都会连接 神经网络的层数:一般指的谁隐藏层的数量 上图中的网络即为一层神经网络 以上即为两层的全连接神经网络 两层神经网络模型训练 神经网络的层次是不是越多越好?并不是越多越好…

BurpSuit配置抓包http和https请求

1、下载安装burpsuit https://portswigger.net/burp/communitydownload 双击一直点下一步,可安装成功 2、burpsuit设置 2、浏览器设置代理 设置-高级-打开代理设置-局域网设置 3、这样可以抓取http包了 4、Burp Suite要抓HTTPS的包,是需要有Burp Sui…

TensorFlow10-多层神经网络建模,存储和载入

整体流程: 只保存最近5个模型 playground.tensorflow.org TensorFlow浏览器训练网址

手机突然电量消耗很快_手机掉电突然变快?这5点操作你肯定至少做了其中一个!...

许多人都遇到过手机掉电突然变快的情况。以前充一次电,明明可以用一整天的,某天突然发现,满电的手机没打几局游戏或才看一会电视,电量就没了一大半,一天充好几次都不够用。每每遇到这种情况时,很多人都觉得…

Python史上最简单5行代码群发邮件Zmail模块

zmail简介 Zmail 允许你发送和接受邮件尽可能的简单。你不需要去检查你的服务器地址、端口以及自己构造MIME对象,使用Zmail,你只需要关注你的邮件内容即可。Zmail只在python3中运行,不需要第三方模块。不支持python2 Zmail的优势 自动填充…

TensorFlow11CNN和全卷积神经网络

应用:图像分类,物体识别,看图说话 卷积神经网络的基本结构

jmeter web监听结果_Jmeter性能测试

Jmeter性能测试,Jmeter简介1.1 概述JMeter,每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率。 熟练使用Jmeter后, 能用Jmeter搞定的事情,你就不会使用LoadRunner了。Jmeter 是一款…

Appium+Python安卓自动化测试之启动APP和配置获取

AppiumPython安卓自动化测试之启动APP和配置获取 本文章未讲述appiumpython环境部署,环境部署会新开文章 一、手机连接电脑 1、USB连接电脑和手机,手机上点确认连接(最好用原装线) 2、开启手机开发者模式和USB调试&#xff08…

python身份证号掩盖出生日期的代码_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...

大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作“全国身份证号验证及查询系统”,成品界面如下图: 本系统可以实现身份证号真伪验证,年龄、性别及发证地查询,看…

jop怎么读音英语怎么说_“跨年”英语怎么说?

2020年已经过去了31日晚上跨年夜,你在哪里跨年呢?今天的问题来了,你知道“跨年”用英语怎么说吗?一起学习一下吧。“跨年夜”英语怎么说?跨年夜的英语表达是:Spend New Years Eve / Celebrate New Years Ev…

吴恩达深度学习笔记——卷积神经网络(CNN)

目录 一、计算机视觉(Computer vision) 二、边缘检测示例(Edge detection example) 三、更多的边缘检测内容(More edge detection) 四、Padding 五、卷积步长(Strided convolution&#xff…

react实现全选和反选_全选的实现

在很多的表单中我们都会看到有一个这样的功能&#xff0c;全选后进行一系列的操作。如操作前操作后简单的js实现首先要定义多选框&#xff0c;在表头可以使用id来定义同时添加onclick点击事件<input type"checkbox" id"all" onclick"checkAllCart(…

对tf.nn.softmax的理解

Softmax的含义&#xff1a;Softmax简单的说就是把一个N*1的向量归一化为&#xff08;0&#xff0c;1&#xff09;之间的值&#xff0c;由于其中采用指数运算&#xff0c;使得向量中数值较大的量特征更加明显。 如图所示&#xff0c;在等号左边部分就是全连接层做的事。 W是全连…

面试后要请你吃饭_面试问同事请吃饭唯独不叫你咋办?小伙说这是好机会,当场被录取...

分享职场故事&#xff0c;交流职场经验&#xff0c;欢迎关注“罗波”。不知道大家在面试的过程中&#xff0c;有没有遇到过一些考官出了非常奇葩或者让你难以回答的题目。曾经在一次人事招聘的面试环节中&#xff0c;我的朋友小何就遇到了这样的一个问题&#xff0c;当时领导问…

心动的本质是什么_那一刻,我怦然心动了......

见到布莱斯罗斯基的第一天&#xff0c;我心动了。他的双眸有种魔力让我如痴如醉。女孩对一个刚见面的男孩一见钟情&#xff0c;男孩成了她的邻居&#xff0c;而她管这种感觉叫&#xff1a;怦然心动。2010年《怦然心动》上映&#xff0c;导演罗伯莱纳用一棵树&#xff0c;一对小…

筒灯智能驱动芯片作用_如然之光,魅族 Lipro 智能家居发布首期健康照明系列--智能设备 -...

1 月 5 日&#xff0c;魅族科技(MEIZU)正式发布了 Lipro 智能家居旗下的首期产品&#xff0c;Lipro 健康照明系列。作为 Lipro 品牌的首次产品亮相&#xff0c;Lipro 健康照明系列集顶尖光源品质与优雅工业设计于一体&#xff0c;为用户带来全场景、高品质的光照体验。Lipro 健…

vue 如何生成一个dom元素_通过一个简单的示例学习如何编写Vue组件

大家好&#xff0c;本篇文章我将带着大家一起学习如何编写自定义组件(Components)&#xff0c;通过「vue基础」新手快速入门篇(一)这篇文章的学习&#xff0c;我们知道了 Vue 设计的目的就是为了方便我们创建基于组件UI的项目。基于这个设计原则&#xff0c;我们可以更专注于设…

tensorFlow13卷积神经网络发展

数据增强&#xff1a;增加训练数据&#xff0c;水平翻转&#xff0c;改变对比度 dim代表插入的位置。0代表第一个位置&#xff0c;1表示第二个位置&#xff0c;-1表示最后一个位置