Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Отправка soap-запроса через через модуль suds

python
Теги: #<Tag:0x00007f7b648e4a90>

(Alexey) #1

Кто может подсказать, каким образом, используя модуль suds, можно отправить soap-запрос.


(Mykhailo Poliarush) #2
from suds.client import Client
url = 'http://localhost:7080/webservices/WebServiceTestBean?wsdl'
client = Client(url)
result = client.service.getPercentBodyFat('jeff', 68, 170)
print result

https://fedorahosted.org/suds/wiki/Documentation


(Alexey) #3

Наверное, я невнятно объяснил суть моей проблемы.
Я хочу сделать скрипт, который будет проверять несколько wsdl’ей.
И если wsdl доступна, то сделать запрос по какому-нибудь методу.
Но методы у этих wsdl’ей разные, т.е. использовать

result = client.service.getPercentBodyFat('jeff', 68, 170)

не вариант.
Есть ли какие-то изящное решение, кроме как городить кучу if’ов?

Так же, есть еще такой вопрос, можно ли через suds, получить status code? Как это сделано в модуле request

        response = requests.get(url)
        print(response.status_code)

(Mykhailo Poliarush) #4

Ну создаете клиент suds, если он не бросает эксепшин при инициализации, то wsdl доступен.
Далее вам нужно посмотреть все методы доступные через wsdl

print client
Suds - version: 0.3.3 build: (beta) R397-20081121

Service (WebServiceTestBeanService) tns="http://test.server.enterprise.rhq.org/"
   Prefixes (1):
     ns0 = "http://test.server.enterprise.rhq.org/"
   Ports (1):
     (Soap)
       Methods:
         addPerson(Person person, )
         echo(xs:string arg0, )
         getList(xs:string str, xs:int length, )
         getPercentBodyFat(xs:string name, xs:int height, xs:int weight)
         getPersonByName(Name name, )
         hello()
         testExceptions()
         testListArg(xs:string[] list, )
         testVoid()
         updatePerson(AnotherPerson person, name name, )
   Types (23):
     Person
     Name
     Phone
     AnotherPerson

Далее по найденному методу нужно формировать запрос. Если запрос простой, то можно передавать данные через параметры. А если нужно какие-то сложно-компонованные элементы сделать тогда нужно использовать factory

name = client.factory.create('Person.Name') 

https://fedorahosted.org/suds/wiki/Documentation#FACTORY
https://jortel.fedorapeople.org/suds/doc/suds.client.Factory-class.html


(rmerkushin) #5

Можно еще поглядеть в сторону новой библиотеки Zeep т.к. Suds вроде больше не поддерживается, есть правда форки вроде suds-py3