Возможно ли использовать библиотеку Python requests
для отправки запроса SOAP?Отправка запроса SOAP с использованием запросов Python
ответ
Это действительно возможно.
Вот пример вызова погоды SOAP-службы с помощью текстовых запросов 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
Некоторые примечания:
- Заголовки имеют важное значение. Большинство запросов SOAP не будут работать без правильных заголовков.
application/soap+xml
, вероятно, более правильно заголовок для использования (но weatherservice предпочитаетtext/xml
- Это возвращает ответ в виде строки XML. - то тогда нужно будет разобрать, что XML
- Для простоты я включил запрос . как простой текст, но лучше практика будет хранить это в качестве шаблона, то вы можете загрузить его с помощью jinja2 (к примеру) - и также проходят в переменных
Например:
.Некоторые люди упомянули библиотеку пены. Suds, вероятно, тем более правильно способ взаимодействия с SOAP, но я часто нахожу, что он немного паникует, когда у вас есть WDSL, которые плохо сформированы (что, TBH, более вероятно, когда вы имеете дело с учреждением который все еще использует SOAP;)).
Вы можете сделать выше, с пеной так:
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
Примечание: при использовании пены, вы почти всегда будете в конечном итоге нужно use the doctor!
Наконец, небольшой бонус для отладки SOAP; TCPdump - ваш друг. На Mac, вы можете запустить TCPdump так:
sudo tcpdump -As 0
Это может быть полезно для проверки запросов, которые на самом деле идут по проводам.
Вышеуказанные два фрагмента кода, также доступны в гов:
Что делать, если служба запрашивает имя пользователя и пароль? где их отметить? – Oskars
Фрагмент кода пены теперь дает «suds.transport.TransportError: Ошибка HTTP 500: Внутренняя ошибка сервера». Похоже, сервер закрыт. – Louis
@ toast38coza http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL -> Ошибка сервера в приложении «/ WeatherWS». Пожалуйста, обновите пример. –
- 1. Отправка запроса SOAP с использованием libcurl
- 2. Выполнение запроса SOAP с использованием модуля запросов Python
- 3. Отправка SOAP-запросов в C#
- 4. PHP отправка запроса SOAP с клиентом SOAP
- 5. Отправка запроса SOAP на FritzBox
- 6. Отправка SOAP-запросов с использованием libcurl в виде XML-файла
- 7. Отправка запроса SOAP с предварительным предварительным аутентификацией
- 8. Отправка Soap-запроса с Umlaut в OTRS
- 9. NodeJS Отправка запроса HTTPS SOAP
- 10. Отправка запроса SOAP-приложения/мыла + xml с использованием классического ASP
- 11. Отправка запроса SOAP с помощью публичного IP
- 12. отправка запроса SOAP с помощью C#
- 13. Отправка запроса SOAP к reactome.org с завитка
- 14. Отправка/получение запросов/ответов SOAP на C
- 15. Отправка jQuery запроса AJAX с помощью библиотеки запросов Python
- 16. Отправка нескольких запросов SOAP в одном пакете
- 17. Отправка аргументов через Soap в Node.js с использованием node-soap
- 18. Отправка запроса JSON с Python
- 19. Отправка запроса SOAP на конкретную услугу
- 20. FireFox Отправка запроса CORS (с использованием jQuery)
- 21. Отправка запроса SOAP на ошибку WebService 500
- 22. Проблема Отправка запросов SOAP с драгоценным камнем Savon в рубине
- 23. отправка параметров данных в rest api с использованием python-запросов
- 24. Отправка запросов на веб-страницы с использованием Python
- 25. Отправка запроса POST с использованием PHP
- 26. Отправка запроса POST с использованием httplib
- 27. Отправка запросов POST-запросов
- 28. отправка данных XML с использованием поста запроса
- 29. отправка запросов json в Python
- 30. Имитация запроса ajax с помощью python с использованием запросов lib
Как это решение? http://stackoverflow.com/q/15569330/2620328 – sihrc
не предполагается использовать пены; –
@ DeepankarBajpeyi почему бы и нет? Это единственный инструмент, подходящий для работы. –