3

サーバーにファイルをアップロードするだけの小さな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)

入力ファイルは何らかの方法でエンコードする必要がありますか?(「リクエスト」のドキュメントに関連するものは見つかりませんでした)。

4

1 に答える 1

0

いくつかのデバッグの後、実際に何が起こっているのかを見つけました。

スクリプトで次のインポートを削除することで、問題を修正できました。

from __future__ import unicode_literals

このインポートは、(リクエストが依存する) urllib3 で望ましくない文字列変換を引き起こすようです。リクエストの作成者が説明したように、この問題はurllib3に対して提出する必要があります。

于 2012-06-28T08:41:27.767 に答える