P粉4222270232023-08-17 12:40:36
(2018) 新的Python requests函式庫簡化了這個過程,我們可以使用 'files' 變數來表示我們要上傳一個多部分編碼的檔案
url = 'http://httpbin.org/post' files = {'file': open('report.xls', 'rb')} r = requests.post(url, files=files) r.text
P粉5904283572023-08-17 11:32:38
如果upload_file
是指文件,請使用:
files = {'upload_file': open('file.txt','rb')} values = {'DB': 'photcat', 'OUT': 'csv', 'SHORT': 'short'} r = requests.post(url, files=files, data=values)
然後requests
將發送一個多部分錶單POST請求體,其中upload_file
欄位設定為file.txt
檔案的內容。
檔案名稱將包含在特定欄位的mime頭中:
>>> import requests >>> open('file.txt', 'wb') # 创建一个空的演示文件 <_io.BufferedWriter name='file.txt'> >>> files = {'upload_file': open('file.txt', 'rb')} >>> print(requests.Request('POST', 'http://example.com', files=files).prepare().body.decode('ascii')) --c226ce13d09842658ffbd31e0563c6bd Content-Disposition: form-data; name="upload_file"; filename="file.txt" --c226ce13d09842658ffbd31e0563c6bd--
請注意filename="file.txt"
參數。
如果需要更多控制,可以使用元組作為files
映射值,元組的長度應在2到4之間。第一個元素是檔名,其後是內容,也可以選擇性地包含內容類型頭和其他頭的對應:
files = {'upload_file': ('foobar.txt', open('file.txt','rb'), 'text/x-spam')}
這將設定一個替代檔案名稱和內容類型,省略了可選的頭。
如果您希望整個POST請求體來自檔案(沒有指定其他欄位),請不要使用files
參數,直接將檔案作為data
進行POST。您可能還想設定一個Content-Type
頭,否則將不會設定任何頭。參見Python requests - POST data from a file。