Python POST двоичные данные

Я пишу некоторый код для взаимодействия с Redmine, и мне нужно загрузить некоторые файлы как часть процесса, но я не уверен, как сделать запрос POST от Python, содержащий двоичный файл.

Я пытаюсь имитировать командыВот:

curl --data-binary "@image.png" -H "Content-Type: application/octet-stream" -X POST -u login:password http://redmine/uploads.xml

В питоне (ниже), но, похоже, не работает. Я не уверен, что проблема связана с кодировкой файла или что-то не так с заголовками.

import urllib2, os

FilePath = "C:\somefolder\somefile.7z"
FileData = open(FilePath, "rb")
length = os.path.getsize(FilePath)

password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, 'http://redmine/', 'admin', 'admin')
auth_handler = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
request = urllib2.Request( r'http://redmine/uploads.xml', FileData)
request.add_header('Content-Length', '%d' % length)
request.add_header('Content-Type', 'application/octet-stream')
try:
    response = urllib2.urlopen( request)
    print response.read()
except urllib2.HTTPError as e:
    error_message = e.read()
    print error_message

У меня есть доступ к серверу, и это выглядит как ошибка кодировки:

...
invalid byte sequence in UTF-8
Line: 1
Position: 624
Last 80 unconsumed characters:
7z¼¯'ÅÐз2^Ôøë4g¸R

Ответы на вопрос(4)

Ваш ответ на вопрос