Python Создать байтовый массив для веб-службы, ожидающий байт - PullRequest
2 голосов
/ 22 июля 2010

Я использую веб-сервис на основе SOAP, который ожидает элемент изображения в форме 'ByteArray', описанный в их документах как тип 'byte []' - клиент, которым я пользуюсь, - это библиотека suds на основе Python.

Проблема в том, что я не совсем уверен, как представлять ByteArray для этого сервиса - я предполагаю, что он должен выглядеть примерно так:

[71,73,70,56,57,97,1,0,1,0,128,0,0,255,255,255,0,0,0,33,249,4,0,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59]

Теперь, когда я отправляюэто как часть запроса, служба жалуется с сообщением: Недопустимая длина последовательности Base64 (105).Должно быть кратно 4. Означает ли это, что мне придется дополнять каждый элемент нулями, чтобы сделать их 4 длинными, то есть [0071,0073,0070, ...]?

Ответы [ 2 ]

2 голосов
/ 23 июля 2010

В конце концов я понял, что веб-сервис, обозначаемый ByteArray (byte []), выглядит примерно так:

/9j/4AAQSkZJRgABAgEAYABgAAD/7gAOQWRvYmUAZAAAAAAB...

... ага, база 64 (нигде в их документахСпешу добавить) ...

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

encoded_data = base64.b64encode(open(file_name, 'rb').read())
strg = ''
for i in xrange((len(encoded_data)/40)+1):
    strg += encoded_data[i*40:(i+1)*40]
# strg then contains data required

Я нашел вдохновение прямо здесь - благодаряДуг Хеллман

0 голосов
/ 22 июля 2010

Попробуйте bytearray.

...