python-requests(四):呼叫上傳檔案的介面的解決方案
說明:本文轉載自:http://www.lemfix.com/topics/43426
request官方網站地址:https://www.osgeo.cn/requests/user/advanced.html#post-multiple-multipart-encoded-files
前言
滴滴滴! 今天聊聊介面自動化,遇到檔案上傳的介面怎麼去測試。
近期也有不少的小夥伴在工作中遇到了檔案上傳的介面,表示不知道應該如何去傳遞檔案上傳的引數。
為了幫大家解決這個疑惑,我這邊特地寫了一個檔案上傳的介面,那麼接下來我們結合這個介面給大家來講講解決方案。
介面說明
-
介面地址:http://127.0.0.1:5000/upload
-
請求方法:POST
-
請求型別:Content-Type: multipart/form-data;
-
響應型別: Content-Type:application/json
-
介面入參
引數名 引數型別 說明 nickname string 使用者暱稱 age int 年齡 sex string 性別 pic file(檔案) 上傳的檔案 -
出參(返回值)
欄位名 型別 說明 code int 業務碼(1代表上傳成功,0程式碼上傳失敗) data obj 相關的資料資訊 msg string 相關的描述資訊 返回參考示例:
{ "code": 1, "data": { "age": "456", "datetime": "Thu, 12 Mar 2020 16:22:57 GMT", "filename": "handle_sign.py", "name": "123", "sex": "男" }, "msg": "檔案上傳成功,檔案儲存的地址為:http://127.0.0.1:5000/images/handle_sign.py" }
針對上面的介面文件簡要的說明一下:
該介面需要四個引數,其中一個是用來接收上傳的檔案的,看上去和其他的介面並沒有什麼不一樣的,返回的資料是json型別的;
關於檔案上傳介面,需要我們引起注意的一個地方就是:
請求引數型別都是Content-Type: multipart/form-data;
那麼這種型別的引數,我們在傳送請求的時候要特別注意!他
傳參的方式和其他引數型別是不一樣的。接下來我們分別使用postman和python來請求這個介面。
使用postman上傳檔案
使用postman來上傳檔案,操作起來比較簡單。
關於介面引數直接選擇form-data這一欄進行填寫就好了,要注意的點就是上傳檔案的引數,要選擇檔案型別,然後再對應引數值那一欄選擇對應的檔案即可,點選請求,伺服器返回了上傳成功的相關資訊,詳細操作如下圖:
使用requests模組來上傳
前面我們已經成功的使用了postman來上傳檔案,那麼我們在使用python去做介面自動化的時候,如何來解決這個檔案上傳的問題呢?
在python中關於傳送http請求,我們通常都會使用requets模組,那麼接下來我們就使用requests模組來上傳檔案。
requests模組傳送post請求直接呼叫post方法就可以了,那麼關於檔案上傳這裡傳參的時候要特別注意,
requests傳參型別:
requests模組傳參有四種方式:params、data,、json和files。接下來給大家詳細講解一下requests模組中這幾種傳參方式的區別。
-
parmas: 傳遞查詢字串引數(常用於get請求)
-
data: 傳遞表單型別的引數(引數型別為:Content-Type:application/x-www-form-urlencoded)
-
json: 傳遞json型別的引數(引數型別為:Content-Type:application/json)
-
files: 用於上傳檔案(引數型別: content-type:multipart/form-data;)
上傳檔案的的介面引數的型別為content-type:multipart/form-data,那麼我們使用requests來發送請求的時候,介面中檔案上傳的引數需要使用files來傳遞。files引數格式如下
# fiels為字典型別資料,上傳的檔案為鍵值對的形式,引數名作為鍵,
# 引數值是一個元組,內容為以下格式(檔名,開啟的檔案流,檔案型別)
files = {
"pic": ("test01.gif", open("test01.gif", "rb"), "images/git")
}
# 注意點:除了上傳的檔案,介面其他引數不能放入files中
檔案上傳的引數準備好了,那麼介面中其他的引數怎麼處理呢?其他的引數使用data傳遞即可。引數組織如下:
# 其他的引數
data = {
"nickname": "木森",
"age": 18,
"sex": "男",
}
引數都準備好了,那麼接下來就可以傳送請求了,完整的請求程式碼如下:
1 """ 2 ============================ 3 Author:檸檬班-木森 4 Time:2020/3/13 13:40 5 E-mail:[email protected] 6 Company:湖南零檬資訊科技有限公司 7 ============================ 8 """ 9 10 import requests 11 12 # 如何請求檔案上傳的介面 13 url = "http://127.0.0.1:5000/upload" 14 15 # 上傳的檔案引數 16 files = { 17 "pic": ("test01.gif", open("test01.gif", "rb"), "images/git") 18 } 19 # 其他的引數 20 data = { 21 "nickname": "木森", 22 "age": 18, 23 "sex": "男", 24 } 25 # 傳送請求 26 response = requests.post(url=url, files=files, data=data) 27 # 列印結果 28 print(response.json())
執行以上程式碼,結果如下:
{ 'code': 1, 'data': { 'age': '18', 'datetime': 'Fri, 13 Mar 2020 10:32:24 GMT', 'filename': 'test01.gif', 'name': '木森', 'sex': '男'}, 'msg': '檔案上傳成功,檔案儲存的地址為:http://127.0.0.1:5000/images/test01.gif' }
PS:很神奇有木有,上傳成功了,附上一張圖
關於檔案上傳的介面就給大家聊到這裡,如有其他問題,歡迎留言!