我試圖上傳文件,使用requests庫提交POST。Python請求UTF-8文件名中的扼流圈
這工作得很好:
theFile = { 'LUuploadFile': ("linea.ipa", open(path_to_file, 'rb'), 'application/octet-stream') }
request = requests.post(url, files=theFile)
這將引發一個錯誤:
theFile = { 'LUuploadFile': ("línea.ipa", open(path_to_file, 'rb'), 'application/octet-stream') }
request = requests.post(url, files=theFile)
的錯誤是非常奇怪:
( <class 'requests.exceptions.ConnectionError'>,
ConnectionError(MaxRetryError("HTTPSConnectionPool(host='fupload.apperian.com', port=443):
Max retries exceeded with url: /upload?transactionID=...
(Caused by <class 'socket.error'>: [Errno 32] Broken pipe)",),),
<traceback object at 0x100a8e3f8>)
這不是服務器,它接受的文件名,如果我用curl
:
curl --form "[email protected]́nea.ipa" http://...
我在猜測'requests'將' - '字符作爲UTF-8編碼直接插入到套接字中,作爲Content-Disposition標題的一部分,這是不允許的。你有沒有嘗試百分比編碼的文件名? – univerio
@univerio - 實際上,這正是'捲曲'所做的。 'requests'將它編碼爲'filename * = utf-8''li%CC%81nea.ipa' [(rfc5987)](http://tools.ietf.org/html/rfc5987),服務器可能不支持... – mata
工作線和非工作線之間的區別在於,工作線是指'linea',小寫字母i,而一旦不工作,就會在'i'上帶有重音標記'línea'。我的屏幕上的差異不是很明顯。 – khagler