一、介紹
Python requests庫提供了一個簡單而優雅的方式來使用HTTP。其中一個使用場景就是上傳文件。在本文中,我們將介紹如何使用requests上傳文件,以及如何處理上傳的文件。
二、基本用法
使用requests上傳文件非常簡單。最基本的方法是使用POST請求,並將文件作為請求的一部分提交到服務器。
import requests url = 'http://httpbin.org/post' # 測試網站,返回POST請求數據 files = {'file': open('test.txt', 'rb')} # 文件名為test.txt r = requests.post(url, files=files) print(r.text) # 查看返回的POST請求數據
在上述代碼中,我們使用‘open’函數讀取文件,並將其作為文件。’files’參數是一個字典,鍵為提交時的參數名,值為文件對象。
三、上傳多個文件
上傳多個文件也很簡單,只需要在‘files’參數中添加多個參數即可。
import requests url = 'http://httpbin.org/post' files = {'file1': open('test1.txt', 'rb'), 'file2': open('test2.txt', 'rb')} # 多個文件 r = requests.post(url, files=files) print(r.text)
四、使用其他表單數據
除了上傳文件,我們還可以將其他參數作為表單數據提交到服務器。可以通過在‘data’參數中傳遞參數來實現。例如:
import requests url = 'http://httpbin.org/post' files = {'file': open('test.txt', 'rb')} data = {'foo': 'bar'} # 其他表單數據 r = requests.post(url, data=data, files=files) print(r.text)
五、自定義文件名和文件類型
在默認情況下,requests會將上傳的文件名和文件類型設置為原始文件名和文件類型。我們可以通過傳遞一個元組來自定義文件名和文件類型:
import requests url = 'http://httpbin.org/post' files = {'file': ('test.txt', open('test.txt', 'rb'), 'text/plain')} r = requests.post(url, files=files) print(r.text)
在上述代碼中,我們使用一個元組來定義文件名和文件類型。第一個參數是文件名,第二個參數是文件對象,第三個參數是文件類型。
六、批量上傳
在某些情況下,我們需要一次上傳多個文件,可以使用列表和循環來實現批量上傳。例如:
import requests url = 'http://httpbin.org/post' files = {'file': [('test1.txt', open('test1.txt', 'rb')), ('test2.txt', open('test2.txt', 'rb'))]} # 文件名為test1.txt和test2.txt r = requests.post(url, files=files) print(r.text)
在上述代碼中,我們將文件名和文件對象作為元組添加到列表中,然後將該列表作為‘files’參數的值傳遞給requests.post方法。
七、處理上傳的文件
有時候,我們需要在上傳文件後對上傳的文件進行處理。例如,我們可能需要將文件保存到本地文件系統或上傳到另一個服務器。
import requests url = 'http://httpbin.org/post' files = {'file': open('test.txt', 'rb')} r = requests.post(url, files=files) with open('response.txt', 'wb') as f: f.write(response.content) # 將響應內容寫入本地文件 print('文件已保存到本地')
在上述代碼中,我們使用‘open’函數打開一個文件‘response.txt’,然後將響應內容寫入該文件。注意,在使用requests.post方法上傳文件時,返回的響應包含了服務器返回的數據,因此我們需要使用‘content’屬性來獲取響應內容。
八、處理chunked編碼的響應
有些服務器使用chunked編碼來返迴響應,這種情況下,requests必須解碼響應內容才能使其可讀。可以通過設置‘stream’參數來請求一個具有流式傳輸支持的響應,然後使用‘iter_content’方法來迭代響應內容。例如:
import requests url = 'http://httpbin.org/post' files = {'file': open('test.txt', 'rb')} r = requests.post(url, files=files, stream=True) with open('response.txt', 'wb') as f: for chunk in r.iter_content(chunk_size=1024): f.write(chunk) print('文件已保存到本地')
在上述代碼中,我們首先設置‘stream’參數為True,以請求一個具有流式傳輸支持的響應。然後使用‘iter_content’方法來迭代響應內容,並將內容分塊存儲到文件中。請注意,‘iter_content’方法的第一個參數‘chunk_size’用於定義一次性迭代多少字節。在這個例子中,我們將一次迭代的字節數設置為1024。
九、結語
本文介紹了如何使用Python requests庫上傳文件。我們了解了如何上傳單個文件、多個文件、自定義文件名和文件類型、處理上傳的文件和chunked編碼的響應。使用requests上傳文件非常簡單,但是在處理上傳的文件和響應的過程中可能會遇到一些挑戰。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/152510.html