requests请求接口---上传文件

Posted 习久性成

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requests请求接口---上传文件相关的知识,希望对你有一定的参考价值。

接口测试中,上传文件的测试场景非常常见。例如:上传头像(图片)、上传文件、上传视频等。下面以一个上传图片的例子为大家讲解如何通过 python 测试上传文件接口。

首先通过抓包分析上传文件接口的请求参数:

 

下面是上传文件接口脚本。把目标文件以open打开,然后存储到变量file。并且使用files参数指明请求的参数名称、上传文件的类型、以及上传文件的路径。

 

注意:

content-type参数,如果我们通过form-data的方式上传文件,我们发送post请求的时候,headers这个参数中一定不能要包括这个值;即不需要包括

{"Content-Type":"multipart/form-data"},例如:

requests库会自动添加这个元素{"Content-Type":"multipart/form-data"};加了反而会报错,即请求不成功。

在前端允许和支持上传的所有格式文件中,当选择不同格式文件时对接口发起请求时,Form Data会自动识别文件的Content-Type【根据传入的文件格式自动解析为headers中的Content-Type】以及Content-Disposition【该字段中包括接口的传参类型,传入文件名等】。例如:

 

requests请求接口上传文件代码示例:

import requests
from utils.LogUtil import my_log
from faker import Faker
log=my_log()
faker = Faker(\'zh_CN\')
 
 
class marketCreate():
 
 
 def loginToken(self,mobile,code):
 \'\'\'
 登陆、注册接口
 :param mobile: 手机号
 :param code:  验证码
 :return:
 \'\'\'
 url=\'http://api.xxxxxx.net/v1/user/loginOrRegister\' #登陆接口请求地址
 headers={\'Content-Type\': \'application/json\'}      #请求头信息,json数据类型
 json={"code":code,"deviceId":"5de548ad0e268bc0","deviceName":"HWNXT","mobile":mobile,"mobilePrefix":"63","version":"39"}   #请求数据
 r=requests.post(url,headers=headers,json=json) #发送请求
 token=r.json()[\'data\'][\'userVO\'][\'token\']    #获取token
 log.info(\'手机号\'+mobile+\'的token值为:\'+token) #打印日志
 return token                  #将token返回出去
 
 def uploadimages(self,mobile,file_path,filename):
 \'\'\'
 上传图片接口
 :param mobile:   手机号
 :param file_path:  文件路径
 :param filename:  文件名称
 :return:
 \'\'\'
 token = self.loginToken(mobile=mobile, code=\'789789\')    #请求登陆接口,获取token
 url=\'http://api.xxxxxx.net/v1/upload/images\' #上传文件接口请求地址
 headers={\'token\': token}   #请求头信息关联token。不需要赋值Content-Type,requests库会帮忙添加这个元素,加了可能会报错。
 file_data={\'file\':(filename,open(file_path,\'rb\'),\'image/jpeg\')} #重点:上传文件请求数据。
 r=requests.post(url=url,headers=headers,files=file_data)    #发送请求
 print(r.json())   #打印响应结果
 
if __name__ == \'__main__\':
 m=marketCreate()
 # 测试,输入手机号、文件地址、文件名称信息;
 m.uploadimages(mobile=\'639266558329\',file_path=\'D:pyCharm_workcmkjProjectdatamarket.jpg\',filename=\'123456.jpg\')

执行结果:

C:Python38python.exe D:/pyCharm_work/cmkjProject/page/marketPage.py
2020-01-02 13:48:09,580-D:pyCharm_workcmkjProjectutilsLogUtil.py-INFO-手机号639266558329的token值为:ba9b4f622fa4d6461523870c0d00df46
{\'code\': 0, \'data\': \'/group1/M00/00/00/rBDKPF4NhE-ABIFmAAGhT9tm-NA158.jpg\', \'success\': True}
 
Process finished with exit code 0

 

以上是关于requests请求接口---上传文件的主要内容,如果未能解决你的问题,请参考以下文章

Python接口测试,requests库的post请求进行文件上传

python+requests接口自动化4. 接口实现文件(图片)上传

python+requests接口自动化4. 接口实现文件(图片)上传

使用requests 通过接口上传form-data格式文件

request接口上传附件

requests上传文件,又要上传data的处理