Python接口自動化之文件上傳/下載接口詳解
〇、前言
文件上傳/下載接口與普通接口類似,但是有細微的區(qū)別。
如果需要發(fā)送文件到服務(wù)器,例如:上傳文檔、圖片、視頻等,就需要發(fā)送二進制數(shù)據(jù),上傳文件一般使用的都是 Content-Type: multipart/form-data 數(shù)據(jù)類型,可以發(fā)送文件,也可以發(fā)送相關(guān)的消息體數(shù)據(jù)。
反之,文件下載就是將二進制格式的響應(yīng)內(nèi)容存儲到本地,并根據(jù)需要下載的文件的格式來寫文件名,例如: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. 代碼實現(xiàn)
(1)實現(xiàn)步驟:
構(gòu)造文件數(shù)據(jù),通過open函數(shù)以二進制方式打開文件
文件上傳接口參數(shù)與普通post請求一樣,需要寫成Key和Value模式,Key為參數(shù)名稱file(也是組件的name屬性),Value為一個元組(與普通接口不同的地方)

"file": (
"", # 元組第一個值為文件名稱,沒有則取None
open(r"F:\pdf_file.pdf", "rb"), # 若第一個值非None,則取文件open打開的二進制流,否則直接寫文件路徑,如"F:\pdf_file.pdf"
"pdf" # 文件類型
)
"file": (
None,
"F:\pdf_file.pdf"
)
構(gòu)造其他數(shù)據(jù)
{
"title": "接口發(fā)起的文檔",
"fileType": "pdf"
}
發(fā)送請求,將文件數(shù)據(jù)以 files 參數(shù)傳入,其他消息體數(shù)據(jù)通過 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": "接口發(fā)起的文檔",
"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小學(xué)生蔡坨坨
# 時間:2022/3/12 21:04
# 功能:根據(jù)文件類型創(chuàng)建合同文檔
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": "接口發(fā)起的文檔",
? ? ? ? ? ? ? ? "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 | 是,默認單文件也壓縮 | 當(dāng)下載的文件僅一份時,是否壓縮 |
2. 代碼實現(xiàn)
# -*- coding:utf-8 -*-
# 作者:IT小學(xué)生蔡坨坨
# 時間: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"獲取返回內(nèi)容
? ? ? ? # 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()總結(jié)
到此這篇關(guān)于Python接口自動化之文件上傳/下載接口的文章就介紹到這了,更多相關(guān)Python文件上傳/下載接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python接口自動化淺析如何處理動態(tài)數(shù)據(jù)
- Python接口自動化淺析如何處理接口依賴
- python接口自動化測試數(shù)據(jù)和代碼分離解析
- python中playwright結(jié)合pytest執(zhí)行用例的實現(xiàn)
- Python教程之pytest命令行方式運行用例
- Python+Opencv答題卡識別用例詳解
- python+pytest接口自動化之token關(guān)聯(lián)登錄的實現(xiàn)
- python+pytest接口自動化之日志管理模塊loguru簡介
- Python自動化實戰(zhàn)之接口請求的實現(xiàn)
- Python接口自動化?之用例讀取方法總結(jié)
相關(guān)文章
PyTorch 實現(xiàn)L2正則化以及Dropout的操作
這篇文章主要介紹了PyTorch 實現(xiàn)L2正則化以及Dropout的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05
Python實現(xiàn)獲取當(dāng)前日期的所屬信息
在Python中,處理日期和時間是一個常見的任務(wù),它涉及到許多方面,例如獲取日期的年、月、日、星期幾等等,本文將詳細介紹如何使用Python來獲取當(dāng)前日期的各種相關(guān)信息,需要的可以了解下2024-01-01
使用python創(chuàng)建生成動態(tài)鏈接庫dll的方法
這篇文章主要介紹了使用python創(chuàng)建生成動態(tài)鏈接庫dll的方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05

