1. 程式人生 > >關於requests Post方式上傳檔案

關於requests Post方式上傳檔案

背景

前兩天需要呼叫一個介面,使用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’)}