Могу ли я использовать веб-сервис SOAP, используя httparty или устали? - PullRequest
1 голос
/ 29 октября 2010

В настоящее время я работаю над проектом ROR, который должен использовать некоторые веб-службы на основе SOAP.То, что я знаю о потреблении веб-сервисов, граничит с «опасным».Пример, который предоставляет сайт, использует asp с XMLHTTP для отправки того, что выглядит как какой-то XML, завернутый в конверт SOAP.В XML также включена информация об аутентификации.Если я строю XML отдельно, могу ли я затем использовать HTTParty для его отправки и получения ответа?

Если HTTParty не является ответом, тогда любые альтернативные предложения будут очень полезны.Ниже приведен пример asp.

const SoapServer = "http://demo.touricoholidays.com/ws/HotelsService.asmx"
set xmldom = server.CreateObject("Microsoft.XMLDOM")
set xmlhttp = server.CreateObject("Microsoft.XMLHTTP")


xmlhttp.open "POST", SoapServer, false
xmlhttp.setRequestHeader "Content-Type", "text/xml"
xmlhttp.setRequestHeader "SOAPAction", "http://tourico.com/webservices/GetHotelDetails"
xmlhttp.send(SoapTest)

if xmlhttp.Status = 200 then '405 means error, 200 means ok. You know why.

Set xmldom = xmlhttp.responseXML
Response.write(xmldom.xml)

Else
Response.Write("Didn't Work<BR>")
 Response.Write("status="&xmlhttp.status)
 Response.write("<BR>"&xmlhttp.statusText)
 Response.Write("<BR>"&Request.ServerVariables("ALL_HTTP"))
End if
set xmlhttp = nothing
set xmldom = nothing
function SoapTest()
SoapTest = SoapTest & "<SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:SOAP-ENC=""http://schemas.xmlsoap.org/soap/encoding/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:m0=""http://example.com/travelservices/""> "
SoapTest = SoapTest & "<SOAP-ENV:Header>"
SoapTest = SoapTest & "<m:LoginHeader xmlns:m=""http://example.com/webservices/"">"
SoapTest = SoapTest & "<m0:username>ABC</m0:username> "
SoapTest = SoapTest & "<m0:password>123</m0:password> "
SoapTest = SoapTest & "</m:LoginHeader>"
SoapTest = SoapTest & "</SOAP-ENV:Header>"
SoapTest = SoapTest & "<SOAP-ENV:Body>"
SoapTest = SoapTest & "<m:GetHotelDetails xmlns:m=""http://example.com/webservices/"">"
SoapTest = SoapTest & "<m:HotelID>2205</m:HotelID> "
SoapTest = SoapTest & "<m:provider>localTgsProvider</m:provider> "
SoapTest = SoapTest & "</m:GetHotelDetails>"
SoapTest = SoapTest & "</SOAP-ENV:Body>"
SoapTest = SoapTest & "</SOAP-ENV:Envelope>"
end function

1 Ответ

3 голосов
/ 29 октября 2010

возможно использовать HTTParty или любой другой HTTP-клиент, но я бы не рекомендовал это. Вам придется вручную создавать и разбирать конверты и объекты SOAP.

Вместо этого попробуйте библиотеку Savon . Несмотря на то, что он довольно новый, он, кажется, является предпочтительным модулем для SOAP, а не почтенным мылом.

...