我需要创建一个只在服务器上上传文件的小型 WebDAV 客户端。
我发现“requests”库似乎很容易使用,但我无法正确使用它。
客户端应该传输二进制文件——所以我使用了下面的例子:
>>> url = 'http://IPADDR/webdav'
>>> files = {'report.xls': open('report.xls', 'rb')}
>>> r = requests.post(url, files=files)
来自 http://docs.python-requests.org/en/latest/user/quickstart/#post-a-multipart-encoded-file .
对我来说它不起作用,我有以下错误:
File ".../site-packages/requests/packages/urllib3/connectionpool.py", line 260, in _make_request
conn.request(method, url, **httplib_request_kw)
File ".../httplib.py", line 941, in request
self._send_request(method, url, body, headers)
File ".../httplib.py", line 975, in _send_request
self.endheaders(body)
File ".../httplib.py", line 937, in endheaders
self._send_output(message_body)
File ".../httplib.py", line 795, in _send_output
msg += message_body
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 147: ordinal not in range(128)
输入文件应该以某种方式编码吗? (我没有在“请求”文档中找到任何相关内容)。
最佳答案
经过一些调试,我确实发现了问题所在。
我能够通过删除脚本中的以下导入来解决问题:
from __future__ import unicode_literals
此导入似乎导致 unwanted string conversions在 urllib3(请求依赖)中。 应作者要求explained , 此问题应针对 urllib3 提出.
关于unicode - 使用请求库 PUT 二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9289616/