手记

【备战春招】第1天,3-5 request上传文件操作

程名称:Python接口自动化测试框架实战 从设计到开发

  课程章节:走进数据分析

  课程讲师: Mushishi

  课程内容:3-5 request上传文件操作


1. 上传文件-比如上传图片:

【步骤】:

上传时所需用到files参数

files={

   "filename":("文件名称",open("文案路径","rb"))

}

-----选择文件名称, 读文件open()(文件路径,怎么去读"rb类型"),文件是什么格式的。    

上传文件接口:POST:    /web/file/upload_oss  

传参为:Content-Disposition: form-data; name="file"; filename="司机小程序二维码.png"

Content-Type: image/png

  • ------上传文件接口与普通接口的不同:

普通接口Content-type为json格式(Content-Type: application/json; charset=UTF-8)

上传文件接口Content-type为form-data格式(Content-Type: multipart/form-data;)

注: content-type常用格式:(Content-Type定义了请求体的编码格式)

text/plain :纯文本格式

application/json: JSON数据格式

application/xml: 以xml格式上传数据

application/x-www-form-urlencoded 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

multipart/form-data : 表单形式上传数据,常用于上传图片、上传文件、附件等控件的表单;

  • 使用requests库发送form-data格式的http请求:

     form-data格式一般是用来进行文件上传的。但后台写的登录接口必须让入参以form-data格式传入;

【名词解释】

关于boundary:

  • 普通post请求使用 & 来分隔参数,那服务器使用multipart/form-data格式接收POST请求时,使用何种方式来分割参数的呢?答案是boundary。

  • boundary 用于分割参数(使用两个短横线”–”加上boundary字符串作为不同参数的分割),类似于普通post请求中的 & 

Content-Type: image/png   格式为图片格式

Content-Disposition: 存放所传参数的具体信息

2. 需要注意part头信息中的Content-Disposition头,比如Content-Disposition: form-data; name="file"; filename="司机小程序二维码.png"是必须的。和前端标签和后台接口之间传参相关联;

前端标签:<input type="file" name="file" accept=".jpg,.jpeg,.png" class="el-upload__input">

  • requests针对form-data格式的具体处理:

requests模拟的表单格式如下:files = {${name--字段名}: (<filename--文件名称>, <file object--字段值,传参,读取文件>,<content type--文件类型>, <per-part headers>)}

这一行模拟出来的post传参数据为:

Content-Disposition: form-data; name={name};filename=<filename>

Content-Type: <content type>

<file object>

--boundary

通过上述说明,我们可以构造出files后直接post请求发送即可:

files = {

   'name': ('filename', 'file objec', 'contect-type')

}

response = requests.post(url, files=files)

#verify=False,不验证ssl证书;(一般https请求中使用)

代码报错:加了verify=False后代码报异常: InsecureRequestWarning: Unverified HTTPS request is being made to host 'www.imooc.com'. Adding certificate verification is strongly advised.

原因:requests默认附带了一套https信任的证书,不加verify时,默认为True,开启SSL验证。每次调用接口,都会下载证书,验证证书。此时不会报错;但是requests默认附带的根证书在每次requests更新时才会更新,如果固定使用某一版本的requets,那么证书就有可能太旧了。

如果证书版本低会导致证书验证抛出SSLError。

如果不进行证书验证,设置verify=False,则会抛出InsecureRequestWarning异常,具体不验证证书,但是又不会报错的方法------>详细解释可见http://www.python66.com/pythonpachong/402.html

**************注: 读文件类型的时候,写法一般是怎样的呢?

-----选择文件名称,   读文件open()(文件路径,怎么去读"rb类型")    

-----"filename":("文件名称",open("文案路径","rb"))  

#rb模式:以字节(二进制)方式读取文件中的数据。

读取非文本文件,比如: 视频,图片,音频等文件需要使用rb模式读取数据

#wb模式: 以字节(二进制)方式往文件中写入数据

#ab模式: 以字节(二进制)方式往文件末尾追加写入数据




  课程收获:

收获满满,老师讲的挺喜欢,最后实践到了自己的项目中。把学习和工作想融合;






0人推荐
随时随地看视频
慕课网APP