Я хочу использовать веб-службу на основе WSDL SOAP в Python. Я просмотрел код Dive Into Python, но модуль SOAPpy не работает в Python 2.5.
Я пробовал использовать пену, которая работает частично, но не работает с некоторыми типами (suds.TypeNotFound: Type not found: 'item').
Я также посмотрел на Client, но, похоже, он не поддерживает WSDL.
Я посмотрел на ZSI, но он выглядит очень сложным. У кого-нибудь есть образец кода для этого?
WSDL - это https://ws.pingdom.com/soap/PingdomAPI.wsdl и отлично работает с клиентом SOAP PHP 5.
python
web-services
soap
davidmytton
источник
источник
Ответы:
Я бы порекомендовал вам взглянуть на SUDS
«Suds - это облегченный клиент SOAP на Python для использования веб-служб».
источник
Существует относительно новая библиотека, которая является очень многообещающей и хотя все еще плохо документирована, но кажется очень чистой и питонической: python zeep .
См. Также этот ответ для примера.
источник
Я недавно наткнулся на ту же проблему. Вот синопсис моего решения:
Необходимые базовые составляющие кодовые блоки
Ниже приведены необходимые базовые блоки кода вашего клиентского приложения.
Какие модули вам нужны?
Многие предлагали использовать модули Python, такие как urllib2; однако ни один из модулей не работает - по крайней мере, для этого конкретного проекта.
Итак, вот список модулей, которые вам нужно получить. Прежде всего, вам необходимо скачать и установить последнюю версию пены по следующей ссылке:
Кроме того, вам необходимо загрузить и установить модули запросов и suds_requests по следующим ссылкам соответственно (отказ от ответственности: я новичок, чтобы публиковать здесь сообщения, поэтому пока я не могу размещать более одной ссылки).
После того, как вы успешно загрузите и установите эти модули, все готово.
Код
После шагов, описанных ранее, код выглядит следующим образом: Импорт:
Запрос сеанса и аутентификация:
Создайте клиента:
Добавьте заголовок WS-Security:
Обратите внимание, что этот метод создает заголовок безопасности, изображенный на рисунке 1. Таким образом, ваша реализация может отличаться в зависимости от правильного формата заголовка безопасности, предоставленного владельцем службы, которую вы используете.
Используйте соответствующий метод (или операцию):
Ведение журнала :
Одна из лучших практик в таких реализациях, как эта, - это ведение журнала, чтобы увидеть, как осуществляется коммуникация. Если есть какие-то проблемы, это упрощает отладку. Следующий код выполняет базовое ведение журнала. Однако вы можете регистрировать многие аспекты коммуникации в дополнение к тем, которые изображены в коде.
Результат:
Вот результат в моем случае. Обратите внимание, что сервер вернул HTTP 200. Это стандартный код успеха для HTTP-запроса-ответа.
источник
suds_request
при установке произойдет сбой, поэтому, если вы используетеsuds-jurko
fork, вы можете установить,suds_request
который был адаптирован для работы с версией suds от jurko:pip install git+https://github.com/chrcoe/suds_requests.git@feature/python3_suds_jurko
Прямо сейчас (по состоянию на 2008 год) все библиотеки SOAP, доступные для Python, отстой. Я рекомендую по возможности избегать использования протокола SOAP. В прошлый раз, когда мы были вынуждены использовать веб-службу SOAP из Python, мы написали оболочку на C #, которая обрабатывала SOAP с одной стороны и говорила COM с другой.
источник
Zeep - достойная библиотека SOAP для Python, которая соответствует тому, о чем вы просите: http://docs.python-zeep.org
источник
Я периодически ищу на это удовлетворительный ответ, но пока безуспешно. Использую soapUI + запросы + ручной труд.
Я сдался и использовал Java в последний раз, когда мне нужно было это сделать, и просто сдался несколько раз в последний раз, когда я хотел это сделать, но это было несущественно.
Успешно применив в прошлом году библиотеку запросов с RESTful API Project Place, мне пришло в голову, что, возможно, я мог бы просто вручную обработать запросы SOAP, которые хочу отправить, аналогичным образом.
Оказывается, это не так уж сложно, но занимает много времени и подвержено ошибкам, особенно если поля имеют непоследовательные имена (у того, над которым я сейчас работаю, есть jobId, JobId и JobID. Я использую soapUI для загрузки WSDL, чтобы упростить извлечение конечных точек и т. д. и выполнить некоторое ручное тестирование.Пока мне повезло, что на меня не повлияли изменения в каком-либо WSDL, который я использую.
источник
Неправда, что SOAPpy не работает с Python 2.5 - он работает, хотя он очень простой и действительно очень простой. Если вы хотите поговорить с более сложным веб-сервисом, ZSI - ваш единственный друг.
По-настоящему полезная демонстрация, которую я нашел, находится на http://www.ebi.ac.uk/Tools/webservices/tutorials/python - это действительно помогло мне понять, как работает ZSI.
источник
Если вы катаетесь самостоятельно, я настоятельно рекомендую заглянуть на http://effbot.org/zone/element-soap.htm .
источник
SOAPpy теперь устарел, AFAIK, заменен ZSL. Это спорный вопрос, потому что я не могу заставить работать ни один из них, не говоря уже о компиляции, ни на Python 2.5, ни на Python 2.6.
источник
источник