Уведомления

Группа в Telegram: @pythonsu

#1 Май 7, 2019 00:51:19

VadimK
Зарегистрирован: 2013-07-03
Сообщения: 199
Репутация: +  16  -
Профиль   Отправить e-mail  

Soap + Zeep

Подскажите как при помощи Zeep библиотеки составить SOAP запрос приведенный ниже. Т.е. в данный момент я могу его сформировать как текст и при помощи request запостить на сервер.
Но все таки не просто так существуют SOAP клиенты, хочется их использовать. Выбрал Zeep , но примеры его использования примитивные, типа запросить soap метод с парой параметров.
А в моем случае тело запроса достаточно сложное и никак не пойму как его сформировать (не через raw текст).

Буду благодарен за примеры, как создавать блоки, аттрибуты в хедере, теле запроса.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<UserAuth>
<userid>12345</userid>
<password>qwerty</password>
</UserAuth>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<add_labels>
<partnerorderid>111</partnerorderid>
<kepoluserid>222</kepoluserid>
<paymentpin>333</paymentpin>
<labels>
<orderedLabel>
<partnerorderartid>123</partnerorderartid>
<productcode>CC</productcode>
<parcelweight>1</parcelweight>
<sendername>UAB Sirius</sendername>
<sendermobile>003700000001</sendermobile>
<senderaddresscountry>LT</senderaddresscountry>
<receivername>Vardenis Pavardenis</receivername>
<receivermobile>003700000002</receivermobile>
<targetmachineidentification>0119</targetmachineidentification>
<boxsize>XSmall</boxsize>
<printtype>terminal</printtype>
</orderedLabel>
</labels>
</add_labels>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Офлайн

#2 Май 9, 2019 00:55:17

VadimK
Зарегистрирован: 2013-07-03
Сообщения: 199
Репутация: +  16  -
Профиль   Отправить e-mail  

Soap + Zeep

Сам себе отвечаю:

         request_data = {
            'partnerorderid': 123,
            'kepoluserid': 'aaa',
            'paymentpin': 'bbb',
            'labels': [{
                    'boxsize': 'XSmall',
                    'printtype': 'terminal',
            }]
        }
client.service.add_labels(_soapheaders={'UserAuth': {'userid': '123', 'password': 'qwerty'}, **request_data)

Спасибо stackoverflow.

Офлайн

#3 Май 9, 2019 08:28:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Soap + Zeep

Извините за оффтопик, но очень яркий пример. С самого написания топика с интересом за ним наблюдал, задаваясь себе вопросом “интересно много сейчас людей которые пользуются SOAP?”.

Результат характерный, так никто и не ответил…
Как выглядит решение ТС? Оно выглядит как прямой перевод xml в json!

Таким образом похоже SOAP клиенты существуют не зря? Они заплатки которые борются с переусложненным стандартом SOAP, и пакует безумно многословный xml приводя это в некое подобие json. :).

Так стоит ли для новых проектов сейчас использовать SOAP/XML? Я сам много раз согласовывал протоколы обмена, где разработчики предлагали xml. Беседы по душам с вопросами а это зачем, а тут что приводили к переходу на json и сокращению объема сообщений в 2-30 раз. Да да иногда в 30! Ну это конечно на совести разработчиков а не формата.



Офлайн

#4 Май 9, 2019 14:22:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

Soap + Zeep

VadimK
Подскажите как при помощи Zeep библиотеки составить SOAP запрос
Да этот модуль какой-то забагованный вечно. Сколько раз вопросы тут были уже, так каждый раз какие-то глюки в самом модуле.



Офлайн

#5 Май 9, 2019 21:35:16

VadimK
Зарегистрирован: 2013-07-03
Сообщения: 199
Репутация: +  16  -
Профиль   Отправить e-mail  

Soap + Zeep

doza_and
Так стоит ли для новых проектов сейчас использовать SOAP/XML?
У многих старых крупных контор в качестве API именно SOAP. И в ближайшие года никто там ничего менять не будет. Особенно если это какие нибудь почтовые службы и банки.

Так что топить за JSON, когда требуется реализовать SOAP клиента - не совсем корректно.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version