如何使用Python的requests庫上傳檔案?
P粉071559609
2023-08-16 18:44:37
<p>我正在使用Python的requests庫執行一個簡單的任務,即上傳檔案。我在Stack Overflow搜尋了一下,似乎沒有人遇到同樣的問題,也就是伺服器沒有接收到檔案:</p>
<pre class="brush:php;toolbar:false;">import requests
url='http://nesssi.cacr.caltech.edu/cgi-bin/getmulticonedb_release2.cgi/post'
files={'files': open('file.txt','rb')}
values={'upload_file' : 'file.txt' , 'DB':'photcat' , 'OUT':'csv' , 'SHORT':'short'}
r=requests.post(url,files=files,data=values)</pre>
<p>我將'upload_file'關鍵字的值填入了我的檔名,因為如果我留空,它會顯示:</p>
<pre class="brush:php;toolbar:false;">錯誤 - 您必須選擇一個要上傳的檔案! </pre>
<p>現在我得到了:</p>
<pre class="brush:php;toolbar:false;">檔案 file.txt 的大小為 bytes,上傳成功!
查詢服務結果:共有 0 行。 </pre>
<p>這只有在文件為空時才會出現。所以我不知道如何成功發送我的文件。我知道文件是有效的,因為如果我手動填寫表單並訪問這個網站,它會返回一個很好的匹配對象列表,這正是我想要的。我真的很感謝所有的提示。 </p>
<p>一些相關的其他線程(但沒有解決我的問題):</p>
<ul>
<li>使用Python腳本透過POST傳送檔案</li>
<li>http://docs.python-requests.org/en/latest/user/quickstart/#response-content</li>
<li>使用requests上傳檔案並傳送額外資料</li>
<li>http://docs.python-requests.org/en/latest/user/advanced/#body-content-workflow</li>
</ul><p><br /></p>
(2018) 新的Python requests函式庫簡化了這個過程,我們可以使用 'files' 變數來表示我們要上傳一個多部分編碼的檔案
如果
upload_file
是指文件,請使用:然後
requests
將發送一個多部分錶單POST請求體,其中upload_file
欄位設定為file.txt
檔案的內容。檔案名稱將包含在特定欄位的mime頭中:
請注意
filename="file.txt"
參數。如果需要更多控制,可以使用元組作為
files
映射值,元組的長度應在2到4之間。第一個元素是檔名,其後是內容,也可以選擇性地包含內容類型頭和其他頭的對應:這將設定一個替代檔案名稱和內容類型,省略了可選的頭。
如果您希望整個POST請求體來自檔案(沒有指定其他欄位),請不要使用
files
參數,直接將檔案作為data
進行POST。您可能還想設定一個Content-Type
頭,否則將不會設定任何頭。參見Python requests - POST data from a file。