Czy można użyć biblioteki Python requests
do wysłania żądania SOAP?Wysyłanie żądania SOAP za pomocą zapytań w języku Python
Odpowiedz
Jest to rzeczywiście możliwe.
Oto przykład wywołanie Pogoda SOAP usługi przy użyciu zwykłego wnioski lib:
import requests
url="http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL"
#headers = {'content-type': 'application/soap+xml'}
headers = {'content-type': 'text/xml'}
body = """<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://ws.cdyne.com/WeatherWS/" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body><ns0:GetWeatherInformation/></ns1:Body>
</SOAP-ENV:Envelope>"""
response = requests.post(url,data=body,headers=headers)
print response.content
Kilka uwag:
- Nagłówki są ważne. Większość żądań SOAP nie działa bez poprawnych nagłówków.
application/soap+xml
jest chyba bardziej poprawne nagłówek użyć (ale weatherservice preferujetext/xml
- To zwróci odpowiedź jako ciąg xml. - byś wtedy trzeba przeanalizować ten xml
- Dla uproszczenia mam włączone żądanie jako zwykły tekst. Ale najlepsze praktyki byłoby zapisać to jako szablon, można ładować go przy użyciu jinja2 (na przykład) - a także przekazać w zmiennych
na przykład:
.Niektóre osoby wspomniały o bibliotece mydlin. Suds jest prawdopodobnie bardziej podatny na interakcję z SOAP, ale często stwierdzam, że trochę panikuje, gdy masz źle sformułowane WDSL (które, TBH, jest bardziej prawdopodobne niż kiedy masz do czynienia z instytucją wciąż używa SOAP;)).
Można zrobić powyższe z mydlin tak:
from suds.client import Client
url="http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL"
client = Client(url)
print client ## shows the details of this service
result = client.service.GetWeatherInformation()
print result
Uwaga: przy użyciu mydlin, będzie prawie zawsze kończy się konieczności use the doctor!
Wreszcie mała premia za debugowanie SOAP; TCPdump jest twoim przyjacielem. Na komputerze Mac, można uruchomić tcpdump tak:
sudo tcpdump -As 0
Może to być pomocne do kontroli wniosków, które rzeczywiście iść na drucie.
Powyższe dwa fragmenty kodu są również dostępne jako GIST:
co się stanie, jeśli usługa zażąda nazwy użytkownika i hasła? gdzie je notować? – Oskars
Fragment kodu suds daje teraz "suds.transport.TransportError: HTTP Error 500: Internal Server Error". Wygląda na to, że serwer jest zamknięty. – Louis
@ toast38coza http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL -> Błąd serwera w aplikacji "/ WeatherWS". Zaktualizuj przykład. –
- 1. Zmierz czas wczytywania witryny za pomocą zapytań w języku Python
- 2. Wysyłanie pliku za pomocą gniazd w języku Python
- 3. Wysyłanie żądania pocztowego za pomocą sieci/http
- 4. Java - Wysyłanie żądania postu za pomocą HtmlUnit
- 5. Wysyłanie żądania spotkania Outlook za pomocą C#
- 6. Tworzenie żądania SOAP za pomocą XML w Railsach
- 7. Żądania SOAP w .NET
- 8. HTTP Usuń za pomocą modułu zapytań python
- 9. Jak symulować żądanie wpisu HTTP za pomocą modułu zapytań Python?
- 10. wysyłanie żądania XML w java
- 11. Jak filtrować podmioty za pomocą zapytań w języku C#?
- 12. Wysyłanie powiadomień w języku arabskim za pomocą GCM
- 13. Wysyłanie plików za pomocą HTTP POST w języku C#
- 14. Wysyłanie żądania POST danych RAW za pomocą formularza HTML?
- 15. Wysyłanie żądania JSON POST za pomocą preprocesora BSF
- 16. Jak przeprowadzić uwierzytelnianie za pomocą protokołu SOAP?
- 17. Wysyłanie żądania JSON Pythona
- 18. Zminimuj podzapytania za pomocą zapytań IN w AppEngine (python)
- 19. Żądania SOAP w Ruby z certyfikatami X509
- 20. Wysyłanie żądania HTTP/2 POST w języku Ruby
- 21. Wysyłanie żądania wpisu http w języku Ruby przez sieć :: HTTP
- 22. Wysyłanie argumentów za pośrednictwem Soap w Node.js za pomocą węzła-mydła
- 23. Nie można uzyskać odpowiedzi z usługi internetowej za pomocą żądania SOAP za pomocą VBA
- 24. Wysyłanie żądania wpisu w sprayu
- 25. Wysyłanie powiadomień za pomocą GObjects
- 26. Dodawanie załącznika do żądania SOAP
- 27. Wysyłanie żądania http w pliku node.js
- 28. wysyłanie obrazów za pomocą RESTAPI
- 29. Wywoływanie żądania SOAP z komendy powłoki
- 30. Wysyłanie nieprzetworzonych danych za pomocą Pythona
Jak to jest rozwiązanie? http://stackoverflow.com/q/15569330/2620328 – sihrc
nie powinien używać mydlin; –
@DeepankarBajpeyi czemu nie? To jedyne narzędzie odpowiednie do tej pracy. –