SOAP 1.2 клиент python
Я ищу клиента python SOAP 1.2, но кажется, что его не существует. Все существующие клиенты либо не поддерживаются, либо совместимы только с SOAP 1.1:
- пенообразование
- SOAPpy
- ZSI
Ответы
Ответ 1
Библиотека zeep поддерживает как SOAP 1.1, так и 1.2 до тех пор, пока WSDL службы должным образом указывает на это.
<ы > WSF/Python поддерживает SOAP 1.2.
Введение
WSF/Python - это расширение языка Python для WSO2 WSF/C [http://www.wso2.org/projects/wsf/c]. Эта версия позволяет вам потреблять/предоставлять веб-сервисы как с помощью REST и SOAP.
- Поддержка REST
- Поддержка SOAP 1.1
- Поддержка SOAP 1.2
Для загрузки вам не нужно регистрироваться. Просто нажмите "отправить" в самом низу.
Образцы можно найти в загруженном архиве, например:
LOG_DIR = '/tmp/'
LOG_LEVEL = 4
WSFC_HOME = '/opt/wso2/wsf_c'
END_POINT = 'http://localhost:9090/axis2/services/echo/echoString'
if __name__ == '__main__':
message = """
<ns1:echoString xmlns:ns1="http://ws.apache.org/axis2/services/echo">
<text>Hello World!</text>
</ns1:echoString>
"""
try:
client = wso2.wsf.WSClient({
'to':END_POINT,
'WSF_LOG_DIR':LOG_DIR,
'WSF_LOG_LEVEL':LOG_LEVEL,
'WSFC_HOME':WSFC_HOME,
})
print 'Sending: ' + message
response = client.request(message)
if response is not None:
print 'Respose: ' + response + '\n'
else:
print 'Error occurred!'
except wso2.wsf.WSFault, e:
print 'Exception occurred:'
print e
Ответ 2
Несмотря на то, что у этого вопроса есть принятый ответ, есть несколько заметок, которые я хотел бы рассказать о пеной.
В настоящее время я пишу код для взаимодействия с хостом сообщества .tel для работы, и мне нужна была SOAP-библиотека Python, и пена была практически идеальной, за исключением отсутствия поддержки SOAP 1.2.
Мне удалось взломать проблему, так как для моих целей, SOAP 1.1 и SOAP 1.2 достаточно общего, что я смог просто исправить пенообразование для использования пространства имен оболочки SOAP 1.2. Я изложил, что я сделал в этом контексте: https://gist.github.com/858851
Как это стоит воспроизвести здесь, вот код:
from suds.client import Client
from suds.bindings import binding
import logging
USERNAME = 'username'
PASSWORD = 'password'
# Just for debugging purposes.
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
# Telnic SOAP server expects a SOAP 1.2 envelope, not a SOAP 1.1 envelope
# and will complain if this hack isn't done.
binding.envns = ('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')
client = Client('client.wsdl',
username=USERNAME,
password=PASSWORD,
headers={'Content-Type': 'application/soap+xml'})
# This will now work just fine.
client.service.someRandomMethod()
Если у меня есть время, я планирую предоставить патч для пенообразования, чтобы можно было указать версию SOAP, чтобы указать ее, и добавить достаточное количество недостающих функциональных возможностей, чтобы сделать ее полезной.
Ответ 3
Если вы действительно хотите использовать SOAP 1.2, хотя он еще не используется в качестве стандарта, я считаю, что могу опубликовать ответ, требующий некоторой работы (все для более хорошего :)
).
Я рекомендую использовать gSOAP:
gSOAP - простая, кросс-платформенная инструментарий для любителей C/С++ для разработки Веб-службы на основе XML и XML парсеры. Хотя это хорошо известно как инструментарий разработки веб-сервисов и была доказана его хорошая производительность, его также можно использовать для создания высокопроизводительные синтаксические анализаторы XML, сериализаторы и десериализаторы из XML схемы или структуры/классы C/С++. мой экспериментальные результаты показывают, что синтаксические анализаторы XML, сгенерированные с использованием gSOAP набор инструментов запускается в несколько раз быстрее, чем синтаксические анализаторы xerces-c в DOM или SAX Режим.
Теперь, мне жаль, что это было так просто. Из-за того, что gSOAP является библиотекой С++, вам придется обернуть его, чтобы использовать его в Python.
Одним из способов обертывания библиотеки является использование инструмента с именем SWIG (упрощенный Wrapper и Interface Generator). Этот инструмент автоматически обертывает библиотеки C/С++ для использования на языках высокого уровня, например (вы уже догадались) Python.
Я также рекомендую вам прочитать этот файл PDF (со страницы 14) о внедрении gSOAP с С++. Это очень полезно.
Используя это решение, вы можете использовать хорошо изученную библиотеку, SOAP 1.2 и очень хорошее соотношение производительности. Я думаю, вы будете довольны результатами.
Ответ 4
У меня была очень похожая проблема несколько лет назад, и я решил ее с помощью Jython.
Если не существует существующей реализации SOAP 1.2 для Python, вас может заинтересовать Jython, который легко интегрирует вас с Java-платформа. Это означает, что вы можете использовать любой из существующих SOAP 1.2 Java-классов и просто импортировать его в свою программу Jython. Ваша программа Jython - это просто ваша программа Python, но вы можете импортировать классы Java.
Jython включает в себя почти все модули стандартного дистрибутива языка программирования Python, но убедитесь, что ваша программа не использует специальную нестандартную библиотеку Python.
Пример:
скажем, у вас установлен Jython (он бесплатный и Open Source), а ваша программа Python называется myprog.py, и вы хотите использовать класс Java CLASSNAME:
1) импортировать требуемый Java-класс, вставляя import CLASSNAME
в ваш myprog.py
2) запустите jython myprog.py