Python接口自動化之文件上傳/下載接口詳解
〇、前言
文件上傳/下載接口與普通接口類似,但是有細(xì)微的區(qū)別。
如果需要發(fā)送文件到服務(wù)器,例如:上傳文檔、圖片、視頻等,就需要發(fā)送二進(jìn)制數(shù)據(jù),上傳文件一般使用的都是 Content-Type: multipart/form-data 數(shù)據(jù)類型,可以發(fā)送文件,也可以發(fā)送相關(guān)的消息體數(shù)據(jù)。
反之,文件下載就是將二進(jìn)制格式的響應(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. 代碼實(shí)現(xiàn)
(1)實(shí)現(xiàn)步驟:
構(gòu)造文件數(shù)據(jù),通過open函數(shù)以二進(jìn)制方式打開文件
文件上傳接口參數(shù)與普通post請求一樣,需要寫成Key和Value模式,Key為參數(shù)名稱file(也是組件的name屬性),Value為一個(gè)元組(與普通接口不同的地方)
"file": ( "", # 元組第一個(gè)值為文件名稱,沒有則取None open(r"F:\pdf_file.pdf", "rb"), # 若第一個(gè)值非None,則取文件open打開的二進(jìn)制流,否則直接寫文件路徑,如"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é)生蔡坨坨 # 時(shí)間: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[] | 否 | 下載可選項(xiàng),NORMAL(正文),ATTACHMENT(附件) |
needCompressForOneFile | Boolean | 是,默認(rèn)單文件也壓縮 | 當(dāng)下載的文件僅一份時(shí),是否壓縮 |
2. 代碼實(shí)現(xiàn)
# -*- coding:utf-8 -*- # 作者:IT小學(xué)生蔡坨坨 # 時(shí)間: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í)行用例的實(shí)現(xiàn)
- Python教程之pytest命令行方式運(yùn)行用例
- Python+Opencv答題卡識別用例詳解
- python+pytest接口自動化之token關(guān)聯(lián)登錄的實(shí)現(xiàn)
- python+pytest接口自動化之日志管理模塊loguru簡介
- Python自動化實(shí)戰(zhàn)之接口請求的實(shí)現(xiàn)
- Python接口自動化?之用例讀取方法總結(jié)
相關(guān)文章
python編輯用戶登入界面的實(shí)現(xiàn)代碼
這篇文章主要介紹了python編輯用戶登入界面的實(shí)現(xiàn)代碼,非常不錯(cuò),代碼簡單易懂,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07PyTorch 實(shí)現(xiàn)L2正則化以及Dropout的操作
這篇文章主要介紹了PyTorch 實(shí)現(xiàn)L2正則化以及Dropout的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python正則表達(dá)式中的量詞符號與組問題小結(jié)
這篇文章主要介紹了Python正則表達(dá)式中的量詞符號與組問題小結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08Python實(shí)現(xiàn)獲取當(dāng)前日期的所屬信息
在Python中,處理日期和時(shí)間是一個(gè)常見的任務(wù),它涉及到許多方面,例如獲取日期的年、月、日、星期幾等等,本文將詳細(xì)介紹如何使用Python來獲取當(dāng)前日期的各種相關(guān)信息,需要的可以了解下2024-01-01使用python創(chuàng)建生成動態(tài)鏈接庫dll的方法
這篇文章主要介紹了使用python創(chuàng)建生成動態(tài)鏈接庫dll的方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05