Я хочу, чтобы отправить файл с двоичными данными с сервером с помощью urllib2:Загрузка двоичных файлов. Проблемы кодирования
def encode_multipart_formdata(fields, files):
LIMIT = '----------lImIt_of_THE_fIle_eW_$'
CRLF = '\r\n'
L = []
for (key, value) in fields:
L.append('--' + LIMIT)
L.append('Content-Disposition: form-data; name="%s"' % key)
L.append('')
L.append(str(value))
for (key, filename, value) in files:
L.append('--' + LIMIT)
L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, str(filename)))
L.append('Content-Type: %s' % get_content_type(filename))
L.append('')
L.append(value)
L.append('--' + LIMIT + '--')
L.append('')
body = CRLF.join(L)
content_type = 'multipart/form-data; boundary=%s' % LIMIT
return content_type, body
Использование:
f = open(filePath, "rb")
content_type, body = encode_multipart_formdata([("param1",self.param1)], [("myfile", self.name, f.read())])
request = urllib2.Request(url, body)
request.add_header('Content-type', content_type)
request.add_header('Content-length', str(len(body)))
response = urllib2.urlopen(request)
Если файл содержит только ASCII символы, чем все в порядке. Но если файл содержит двоичные данные, у меня есть ошибка при последней строке кода:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x9a in position 271: ordinal not in range(128)
Как закодировать тело? Файл должен быть таким же на сервере, как и на клиенте
Эта задача будет намного проще с библиотекой '' '' '' '' '(http://python-requests.org), если это вариант для вас. –
Хех. Я начал решать свою задачу с помощью 'urllib2' и хотел закончить ее с помощью этой библиотеки. Но, возможно, нужно попробовать и 'запросы' – HotIceCream