Python接口自动化之文件上传/下载接口详解


Posted in Python onApril 05, 2022

〇、前言

文件上传/下载接口与普通接口类似,但是有细微的区别。

如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: multipart/form-data 数据类型,可以发送文件,也可以发送相关的消息体数据。

反之,文件下载就是将二进制格式的响应内容存储到本地,并根据需要下载的文件的格式来写文件名,例如:F:/合同文件.pdf。

一、文件上传接口

1. 接口文档

Request URL: /createbyfile

Request Method: POST

Content-Type: multipart/form-data

名称 类型 是否必须 描述
file File 文档文件
title String 文档名称
fileType String 文件类型:doc, docx, txt, pdf, png, gif, jpg, jpeg, tiff, html, rtf, xls, txt

2. 代码实现

(1)实现步骤:

构造文件数据,通过open函数以二进制方式打开文件

文件上传接口参数与普通post请求一样,需要写成Key和Value模式,Key为参数名称file(也是组件的name属性),Value为一个元组(与普通接口不同的地方)

Python接口自动化之文件上传/下载接口详解

"file": (
    "", # 元组第一个值为文件名称,没有则取None
    open(r"F:\pdf_file.pdf", "rb"), # 若第一个值非None,则取文件open打开的二进制流,否则直接写文件路径,如"F:\pdf_file.pdf"
    "pdf" # 文件类型
)
"file": (
    None,
    "F:\pdf_file.pdf"
)

构造其他数据

{
    "title": "接口发起的文档",
    "fileType": "pdf"
}

发送请求,将文件数据以 files 参数传入,其他消息体数据通过 data 、json 、 headers 、 cookies 等传入

req = {
            "url": "127.0.0.1/v2/document/createbyfile",
            "method": "POST",
            "headers": {},
            "files": {"file": ("", open(r"F:\pdf_file.pdf", "rb"), "pdf")},
            "data": {
                "title": "接口发起的文档",
                "fileType": "pdf"
            }
        }

(2)完整代码

base_api.py

import requests
class BaseApi:
    @staticmethod
    def requests_http(req):
        # ** 解包
        result = requests.request(**req)
        return result

api/createbyfile.py

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2022/3/12 21:04
# 功能:根据文件类型创建合同文档
from base_api import BaseApi
class Createbyfile:
    def createbyfile(self):
        req = {
            "url": "127.0.0.1/createbyfile",
            "method": "POST",
            "headers": {},
            "files": {"file": ("", open(r"F:\pdf_file.pdf", "rb"), "pdf")},
            "data": {
                "title": "接口发起的文档",
                "fileType": "pdf"
            }
        }
        res = BaseApi().requests_http(req)
        assert res.status_code == 200
        res_json = res.json()
        return res_json["result"]["documentId"]
if __name__ == '__main__':
    Createbyfile().createbyfile()

二、文件下载接口

1. 接口文档

Request URL:/download

Request Method:GET

名称 类型 是否必须 描述
contractId Long ID ID
downloadItems String[] 下载可选项,NORMAL(正文),ATTACHMENT(附件)
needCompressForOneFile Boolean 是,默认单文件也压缩 当下载的文件仅一份时,是否压缩

2. 代码实现

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2022/4/5 2:56
# 功能:下载合同
from base_api import BaseApi
class Download:
    def download(self):
        req = {
            "url": "127.0.0.1/download",
            "method": "GET",
            "headers": {},
            "params": {
                "contractId": 2947403075747869536,
                "downloadItems": ["NORMAL"],
                "needCompressForOneFile": False
            },
        }
        res = BaseApi().requests_http(req).content # 注意“.content"获取返回内容
        # with open("F:/response.zip", "wb") as f:
        with open("F:/response.pdf", "wb") as f:
            f.write(res)
        return res
if __name__ == '__main__':
    Download().download()

总结

到此这篇关于Python接口自动化之文件上传/下载接口的文章就介绍到这了,更多相关Python文件上传/下载接口内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
python实现二维码扫码自动登录淘宝
Dec 27 Python
Python实现购物车程序
Apr 16 Python
python3 property装饰器实现原理与用法示例
May 15 Python
Series和DataFrame使用简单入门
Nov 13 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
深入浅析python的第三方库pandas
Feb 13 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
Python调用REST API接口的几种方式汇总
Oct 19 Python
Python连续赋值需要注意的一些问题
Jun 03 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
Aug 30 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
python疲劳驾驶困倦低头检测功能的实现
Python实现自动玩连连看的脚本分享
Apr 04 #Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Python必备技巧之函数的使用详解
You might like
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
javascript URL锚点取值方法
2009/02/25 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
python3使用urllib模块制作网络爬虫
2016/04/08 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
Python列表与元组的异同详解
2019/07/02 Python
python迭代器常见用法实例分析
2019/11/22 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
美国探亲签证邀请信
2014/02/05 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
个人自荐材料
2014/05/23 职场文书
文明班集体申报材料
2014/05/23 职场文书
片区教研活动总结
2014/07/02 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书