關於requests Post方式上傳檔案
阿新 • • 發佈:2018-12-25
背景
前兩天需要呼叫一個介面,使用post方式上傳檔案。於是使用Python的requests進行傳送post請求,但是一直報伺服器500的錯誤,感覺很納悶,折磨我好久之後才注意到之前使用的post請求只是攜帶一些欄位,而這次是需要向介面上傳檔案。
步驟
先這樣,,,再這樣,,,嗯,解決了,先說一下post請求四種傳送正文的方式;
POST請求四種傳遞正文的方式
(1)請求正文是application/x-www-form-urlencoded
最常見的POST提交資料的方式,瀏覽器的原生form表單,如果不設定enctype屬性,那麼最終就會以application/x-www-form-urlencoded方式提交資料。
(2)multipart/form-data
上傳檔案的表單
(3)application/json
用來告訴伺服器訊息主體是序列化之後的JSON字串。
(4)text/xml
它是一種使用HTTP作為傳輸協議,XML作為編碼方式的遠端呼叫規範。
解決
以上我使用最多的是application/json形式,本次需要講的是第二種;
我使用postman上傳檔案成功,匯出python 的程式碼,但是上傳後文件為空,多番修改後無效,就棄用;
附上程式碼:
def upload_image(cover_path): url = "http://api-xxx-xxx" headers ={ 'Authorization':'xxxxxxx', } files = {'file': open(cover_path,'rb')} try: r = requests.post(url=url,files=files,headers=headers).text imageUrl = json.loads(r)['result'] if imageUrl != None: imageUrl = imageUrl[0] except Exception as e: print(e)
最主要:files = {‘file’: open(cover_path,‘rb’)}