PUT двоичных данных с использованием запросов lib - PullRequest
3 голосов
/ 15 февраля 2012

Мне нужно создать небольшой клиент WebDAV, который просто загружает файлы на сервер.

Я нашел библиотеку «запросов», которая, кажется, очень проста в использовании, но я не могу использовать ее должным образом.

Клиент должен передавать двоичные файлы - поэтому я использовал пример ниже:

>>> url = 'http://IPADDR/webdav'
>>> files = {'report.xls': open('report.xls', 'rb')}

>>> r = requests.post(url, files=files)

из http://docs.python -requests.org / ru / latest / user / quickstart / # post-a-multipart-закодированный файл .

Для меня это не работает, у меня следующая ошибка:

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)

Должен ли входной файл как-то кодироваться? (Я не нашел ничего связанного в документации "запросов").

1 Ответ

0 голосов
/ 28 июня 2012

После некоторой отладки я действительно обнаружил, что происходит.

Мне удалось устранить проблему, удалив следующий импорт в моем сценарии:

from __future__ import unicode_literals

Этот импорт, кажется,вызывают нежелательные строковые преобразования в urllib3 (на который опирается запрос).Как объяснил автор запросов , эта проблема должна быть подана против urllib3 .

...