Какие клиентские библиотеки SOAP существуют для Python и где находится документация для них?

Я никогда не использовал SOAP раньше, и я немного новичок в Python. Я делаю это, чтобы познакомиться с обеими технологиями. Я установил SOAPlib и попытался прочитать их клиентскую документацию, но не очень хорошо ее понимаю. Могу ли я найти что-нибудь еще, что больше подходит для клиентской библиотеки SOAP для Python?

Изменить: На всякий случай, если это помогает, я использую Python 2.6.

14 ответов

Решение

Обновление (2016):

Если вам нужен только клиент SOAP, есть хорошо поддерживаемая библиотека под названием zeep. Он поддерживает как Python 2 и 3:)


Обновить:

В дополнение к тому, что упомянуто выше, я буду ссылаться на страницу Python WebServices, которая всегда обновлена ​​со всеми активно поддерживаемыми и рекомендуемыми модулями для SOAP и всех других типов веб-сервисов.


К сожалению, на данный момент, я не думаю, что есть "лучшая" библиотека Python SOAP. Каждый из основных доступных имеет свои плюсы и минусы.

Старые библиотеки:

  • SOAPy: был "лучшим", но больше не поддерживал. Не работает на Python 2.5+

  • ZSI: очень болезненно использовать, и развитие идет медленно. Имеет модуль под названием "SOAPpy", который отличается от SOAPy (см. Выше).

"Новые" библиотеки:

  • SUDS: Очень Pythonic, и легко создавать WSDL-потребляющих клиентов SOAP. Создание серверов SOAP немного сложнее. (Этот пакет не работает с Python3. Для Python3 см. SUDS-py3)

  • SUDS-py3: версия SUDS для Python3

  • spyne: создавать серверы легко, создавать клиентов немного сложнее. Документация несколько отсутствует.

  • Ladon: Создание серверов очень похоже на soaplib (с использованием декоратора). Ladon предоставляет больше интерфейсов, чем SOAP, без необходимости в дополнительном пользовательском коде.

  • pysimplesoap: очень легкий, но полезный как для клиента, так и для сервера - включает интеграцию с сервером web2py, которая поставляется с web2py.

  • SOAPpy: в отличие от заброшенного SOAPpy, который размещен по ссылке ZSI выше, эта версия фактически поддерживалась до 2011 года, а теперь, похоже, и заброшена.
  • soaplib: Простая в использовании библиотека python для написания и вызова веб-сервисов soap. Веб-сервисы, написанные с использованием soaplib, просты, легки, хорошо работают с другими реализациями SOAP и могут быть развернуты как приложения WSGI.
  • osa: быстрая / тонкая и простая в использовании клиентская библиотека SOAP python.

Из всего вышесказанного я использовал только SUDS лично, и мне это очень понравилось.

Я последовал совету других ответов на этот вопрос и попробовал SUDS. После использования этого "в гневе" я должен согласиться: SUDS очень хорош! Настоятельно рекомендуется!

Я столкнулся с проблемой вызова веб-служб на основе HTTPS из-за прокси. На момент написания статьи это затрагивало все клиенты веб-служб Python, которые используют urllib2 поэтому я документирую решение здесь.

urllib2 модуль доставки с Python 2.6.2 и ниже не будет выдавать CONNECT к прокси для сеансов HTTPS-поверх-HTTP-прокси. Это приводит к длительному таймауту или, если вам повезет, ошибке, которая выглядит следующим образом:

abort: error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Это была проблема 1424152 на багтрекере Python. К отчету об ошибках прикреплены патчи, которые исправят это в Python 2.x и Python 3.x. Проблема уже исправлена.

У меня был хороший опыт работы с SUDS https://fedorahosted.org/suds

Использовал их TestSuite в качестве документации.

SUDS это путь, нет сомнений.

Просто предупреждение FYI для людей, которые смотрят на SUDS, пока этот билет не будет разрешен, SUDS не поддерживает тег "choice" в WSDL:

https://fedorahosted.org/suds/ticket/342

смотрите: suds и тег выбора

SUDS прост в использовании, но не гарантирует повторного входа. Если вы сохраняете объект WSDL Client() в многопоточном приложении для повышения производительности, существует некоторый риск. Решение этого риска, метод clone(), выдает неисправимую ошибку Python 5508, которая, кажется, печатает, но не выдает исключение. Может быть запутанным, но это работает. Это по-прежнему лучший клиент Python SOAP.

Мы выпустили новую библиотеку: PySimpleSOAP, которая обеспечивает поддержку простого и функционального клиента / сервера. Его целями являются: простота использования и гибкость (не требуются классы, автоматически сгенерированный код или xml), самоанализ и генерация WSDL, соответствие стандарту WS-I, совместимость (включая Java AXIS, .NET и Jboss WS). Он включен в Web2Py для поддержки решений с полным стеком (дополняющих другие поддерживаемые протоколы, такие как XML_RPC, JSON, AMF-RPC и т. Д.).

Если кто-то изучает SOAP или хочет исследовать его, я думаю, что это хороший выбор для начала.

В моем заключении мы имеем это:

Мыло на стороне клиента:

Использовать только Suds-Jurko (обновлено 2016) suds хорошо поддерживается и обновляется.

ОБНОВЛЕНИЕ 06/2017: библиотека suds-jurko не обновлена ​​и, по- видимому, заброшена,

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

Zeep хорошо запускается и имеет хорошую документацию, поэтому я недавно перенес свой код из suds в zeep и работает нормально.

Сторона сервера мыла:

У нас есть TGWS, soaplib (pysimplesoap не тестировался), ИМХО, и мыло помощи должно быть выбором.

С наилучшими пожеланиями,

Я считаю, что soaplib отказался от своего SOAP-клиента ("отправитель") в пользу suds. На этом этапе soaplib стремится быть независимым от веб-фреймворка сервером SOAP ("получателем"). В настоящее время soaplib находится в активной разработке и обычно обсуждается в списке рассылки Python SOAP:

http://mail.python.org/mailman/listinfo/soap

Как я предложил здесь, я рекомендую вам сделать свой собственный. На самом деле это не так сложно, и я подозреваю, что причина в том, что не существует лучших библиотек Python SOAP.

Пена довольно хорошо. Я попробовал SOAPpy, но не смог заставить его работать так, как мне нужно, в то время как suds работал почти сразу.

Мы использовали SOAPpy из Python Web Services, но похоже, что ZSI (тот же источник) заменяет его.

Может ли это помочь: http://users.skynet.be/pascalbotte/rcx-ws-doc/python.htm

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

Я использую SOAPpy с Python 2.5.3 в производственных условиях.

Мне пришлось вручную отредактировать пару файлов в SOAPpy (что-то с тем, что код заголовка находится в неправильном месте), но кроме этого он работал и продолжает делать это очень надежно.

Другие вопросы по тегам