Chcę używać usługi internetowej opartej na WSDL SOAP w języku Python. Przyjrzałem się kodowi Dive Into Python, ale moduł SOAPpy nie działa pod Pythonem 2.5.
Próbowałem użyć mydlin, które działają częściowo, ale psują się z niektórymi typami (suds.TypeNotFound: Type not found: 'item').
Przyjrzałem się także Client, ale wygląda na to, że nie obsługuje WSDL.
Spojrzałem na ZSI, ale wygląda to na bardzo złożone. Czy ktoś ma do tego przykładowy kod?
WSDL to https://ws.pingdom.com/soap/PingdomAPI.wsdl i działa dobrze z klientem PHP 5 SOAP.
python
web-services
soap
davidmytton
źródło
źródło
Odpowiedzi:
Polecam przyjrzeć się SUDS
„Suds to lekki klient SOAP Python do korzystania z usług sieci Web”.
źródło
Istnieje stosunkowo nowa biblioteka, która jest bardzo obiecująca i choć wciąż słabo udokumentowana, wydaje się bardzo czysta i pythonowa : python zeep .
Zobacz także tę odpowiedź jako przykład.
źródło
Niedawno natknąłem się na ten sam problem. Oto streszczenie mojego rozwiązania:
Potrzebne są podstawowe bloki kodu składowego
Poniżej przedstawiono wymagane podstawowe bloki kodu aplikacji klienckiej
Jakie moduły potrzebujesz?
Wielu sugerowało użycie modułów Pythona, takich jak urllib2; jednak żaden z modułów nie działa - przynajmniej dla tego konkretnego projektu.
Oto lista modułów, które musisz zdobyć. Przede wszystkim musisz pobrać i zainstalować najnowszą wersję suds z poniższego linku:
Dodatkowo musisz pobrać i zainstalować moduły żądań i suds_requests odpowiednio z poniższych linków (zastrzeżenie: jestem nowy, aby pisać tutaj, więc na razie nie mogę opublikować więcej niż jednego linku).
Po pomyślnym pobraniu i zainstalowaniu tych modułów możesz zaczynać.
Kod
Wykonując kroki opisane wcześniej, kod wygląda następująco: Importy:
Żądanie sesji i uwierzytelnianie:
Utwórz klienta:
Dodaj nagłówek WS-Security:
Należy pamiętać, że ta metoda tworzy nagłówek bezpieczeństwa przedstawiony na rysunku 1. Dlatego implementacja może się różnić w zależności od poprawnego formatu nagłówka zabezpieczeń dostarczonego przez właściciela używanej usługi.
Zużyj odpowiednią metodę (lub operację):
Rejestrowanie :
Jedną z najlepszych praktyk w takich implementacjach jak ta jest rejestrowanie w celu sprawdzenia, jak przebiega komunikacja. W przypadku wystąpienia problemu ułatwia debugowanie. Poniższy kod wykonuje podstawowe logowanie. Możesz jednak rejestrować wiele innych aspektów komunikacji oprócz tych przedstawionych w kodzie.
Wynik:
Oto wynik w moim przypadku. Zauważ, że serwer zwrócił HTTP 200. Jest to standardowy kod sukcesu dla odpowiedzi żądanie-odpowiedź HTTP.
źródło
suds_request
instalacja się nie powiedzie, więc jeśli używaszsuds-jurko
forka, możesz zainstalować,suds_request
który został dostosowany do pracy z wersją suds jurko:pip install git+https://github.com/chrcoe/suds_requests.git@feature/python3_suds_jurko
Obecnie (stan na 2008 r.) Wszystkie biblioteki SOAP dostępne dla Pythona są do niczego. Zalecam unikanie SOAP, jeśli to możliwe. Ostatnim razem, gdy byliśmy zmuszeni do korzystania z usługi sieciowej SOAP z Pythona, napisaliśmy opakowanie w języku C #, które obsługiwało SOAP z jednej strony i wypowiadało COM z drugiej.
źródło
Zeep to przyzwoita biblioteka SOAP dla Pythona, która pasuje do tego, o co prosisz: http://docs.python-zeep.org
źródło
Od czasu do czasu szukam satysfakcjonującej odpowiedzi na to pytanie, ale na razie nie mam szczęścia. Używam soapUI + próśb + pracy fizycznej.
Zrezygnowałem i użyłem Javy ostatnim razem, kiedy musiałem to zrobić, i po prostu zrezygnowałem kilka razy, kiedy ostatnio chciałem to zrobić, ale nie było to konieczne.
Po pomyślnym korzystaniu z biblioteki żądań w zeszłym roku z RESTful API Project Place, przyszło mi do głowy, że może mógłbym po prostu ręcznie przekazać żądania SOAP, które chcę wysłać w podobny sposób.
Okazuje się, że nie jest to zbyt trudne, ale jest czasochłonne i podatne na błędy, zwłaszcza jeśli pola mają niespójne nazwy (ten, nad którym obecnie pracuję, ma „jobId”, „JobId” i „JobID”). Do załadowania używam soapUI WSDL, aby ułatwić wyodrębnianie punktów końcowych itp. i przeprowadzanie ręcznych testów.Jak dotąd miałem szczęście, że nie wpłynęły na mnie zmiany w żadnym używanym przeze mnie WSDL.
źródło
To nieprawda, że SOAPpy nie działa z Pythonem 2.5 - działa, chociaż jest bardzo proste i naprawdę bardzo podstawowe. Jeśli chcesz porozmawiać z jakimś bardziej skomplikowanym serwisem internetowym, ZSI jest Twoim jedynym przyjacielem.
Naprawdę przydatne demo, które znalazłem, znajduje się na http://www.ebi.ac.uk/Tools/webservices/tutorials/python - to naprawdę pomogło mi zrozumieć, jak działa ZSI.
źródło
Jeśli tworzysz własną, gorąco polecam zajrzenie na http://effbot.org/zone/element-soap.htm .
źródło
SOAPpy jest teraz przestarzałe, AFAIK, zastąpione przez ZSL. To kwestia dyskusyjna, ponieważ nie mogę zmusić żadnego z nich do pracy, a tym bardziej do kompilacji, na Pythonie 2.5 lub Pythonie 2.6
źródło
źródło