Клиент Python SOAP 1.2 - PullRequest
       34

Клиент Python SOAP 1.2

14 голосов
/ 03 марта 2010

Я ищу клиента Python SOAP 1.2, но, похоже, его не существует. Все существующие клиенты либо не обслуживаются, либо совместимы только с SOAP 1.1:

  • пенообразование
  • SOAPpy
  • ZSI

Ответы [ 4 ]

11 голосов
/ 10 марта 2011

Несмотря на то, что на этот вопрос принят приемлемый ответ, есть несколько замечаний, которые я бы хотел отметить в отношении пены.

В настоящее время я пишу некоторый код для взаимодействия с хостингом сообщества .tel для работы, и мне нужна была библиотека Python SOAP, и suds был в значительной степени идеальным, за исключением отсутствия поддержки SOAP 1.2.

Мне удалось обойти проблему, так как для моих целей SOAP 1.1 и SOAP 1.2 имеют достаточно общего общего, так что я смог просто пропатчить suds для использования пространства имен конверта 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's 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()

Если у меня будет время, я планирую отправить патч в suds, чтобы можно было указать версию SOAP и добавить достаточно недостающие функциональные возможности, чтобы сделать его полезным.

9 голосов
/ 05 марта 2010

Библиотека 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

5 голосов
/ 12 марта 2010

Если вы действительно хотите использовать SOAP 1.2, даже если он еще не используется в качестве стандарта, я считаю, что могу опубликовать ответ, требующий некоторой работы (все для блага :)).

Я рекомендую использовать gSOAP :

gSOAP - простой в использовании, кроссплатформенный инструментарий для любителей C / C ++ для разработки Веб-сервисы на основе XML и XML парсеры. Хотя это хорошо известно как инструментарий разработки веб-сервисов и была доказана его хорошая производительность, это также может быть использовано для создания высокопроизводительные парсеры XML, сериализаторы и десериализаторы из XML схемы или C / C ++ структуры / классы. мой экспериментальные результаты показывают, что парсеры XML, созданные с использованием gSOAP Инструментарий работает в несколько раз быстрее, чем парсеры xerces-c в DOM или SAX режим.

Теперь я бы хотел, чтобы все было так просто. Поскольку gSOAP является библиотекой C ++, вам придется обернуть ее, чтобы иметь возможность использовать ее в Python.

Одним из способов обёртывания библиотеки является использование инструмента с именем SWIG (Упрощенный Обертка и Генератор Интерфейса). Этот инструмент автоматически оборачивает библиотеки C / C ++ для использования в языках высокого уровня, например (как вы уже догадались) Python.

Я также рекомендую прочитать этот файл PDF (со страницы 14) о реализации gSOAP с C ++. Это очень полезно.

Используя это решение, вы можете использовать хорошо выглядящую библиотеку, SOAP 1.2 и очень хорошее соотношение производительности. Я думаю, что вы будете вполне довольны результатами.

1 голос
/ 12 марта 2010

У меня была очень похожая проблема несколько лет назад, и я решил ее с помощью Jython.

Если не существует реализации SOAP 1.2 для Python, вас может заинтересовать Jython , который легко интегрирует вас с платформой Java. Это означает, что вы можете использовать любой из существующих SOAP 1.2 классов Java и просто импортировать его в свою программу Jython. Ваша Jython-программа - это всего лишь ваша Python-программа, но вы можете импортировать классы Java.

Сам Jython включает почти все модули в стандартный дистрибутив языка программирования Python, но убедитесь, что ваша программа не использует никакой специальной нестандартной библиотеки Python.

Пример: скажем, у вас установлен Jython (он бесплатный и с открытым исходным кодом), а ваша программа на Python называется myprog.py, и вы хотите использовать класс Java CLASSNAME:

1) импортировать требуемый класс Java, вставив import CLASSNAME в myprog.py
2) пробег jython myprog.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...