我正在尝试上传文件,使用requests库提交POST。
这很好用:
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 "LUuploadFile=@línea.ipa" http://...
答案 0 :(得分:2)
这意味着特定服务器中的某些内容无法正确实现Content-Disposition
的解析(根据RFC 5987)。我不能比那更具体,因为有许多&#34;移动部件&#34;到Web应用程序服务器(例如,您可能正在使用nginx + fastcgi + PHP),其中任何一个(或所有:))都可能被破坏。你可能会发现this SO thread以及this page很有用,它从另一方面解决问题(下载带有UTF-8名称的文件),但归结为同样的问题(解析&# 34; Content-Disposition&#34; header)。
它的价值requests
正在做什么&#34;正确&#34;事情(根据标准),但如果服务器上的某些组件不遵循标准(或者甚至可能不在服务器上),它也可以做很多事情 - 例如可能存在你正在通过导致问题的代理人。)