Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Ruby) Making SOAP Requests using the REST APIThere's no reason a SOAP request cannot be sent using the REST API. It's only a matter of adding a SOAP specific header, and providing the SOAP XML request body. The response body is the SOAP response XML. This example sends a request to ws.cdyne.com to get city weather by zip code.
require 'chilkat' # Demonstrates how to do a SOAP request using the REST API. # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. # -------------------------------------------------------------------------------- # Also see Chilkat's Online WSDL Code Generator # to generate code and SOAP Request and Response XML for each operation in a WSDL. # -------------------------------------------------------------------------------- rest = Chilkat::CkRest.new() # This is the request to be sent: # POST /WeatherWS/Weather.asmx HTTP/1.1 # Host: wsf.cdyne.com # Content-Type: text/xml; charset=utf-8 # Content-Length: length # SOAPAction: "http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP" # # <?xml version="1.0" encoding="utf-8"?> # <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> # <soap:Body> # <GetCityWeatherByZIP xmlns="http://ws.cdyne.com/WeatherWS/"> # <ZIP>string</ZIP> # </GetCityWeatherByZIP> # </soap:Body> # </soap:Envelope> # Note: The application does not need to set the Host or Content-Length headers. # Chilkat will automatically add these headers. # Make the initial connection (without sending a request yet). bTls = false port = 80 bAutoReconnect = true # In this particular case, it is important to connect to "wsf.cdyne.com", not "ws.cdyne.com"... success = rest.Connect("wsf.cdyne.com",port,bTls,bAutoReconnect) if (success != true) print rest.lastErrorText() + "\n"; exit end # Add request headers: success = rest.AddHeader("Content-Type","text/xml; charset=utf-8") success = rest.AddHeader("SOAPAction","http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP") # Build the SOAP XML request body. soapXml = Chilkat::CkXml.new() soapXml.put_Tag("soap:Envelope") success = soapXml.AddAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance") success = soapXml.AddAttribute("xmlns:xsd","http://www.w3.org/2001/XMLSchema") success = soapXml.AddAttribute("xmlns:soap","http://schemas.xmlsoap.org/soap/envelope/") soapXml.NewChild2("soap:Body","") success = soapXml.GetChild2(0) soapXml.NewChild2("GetCityWeatherByZIP","") success = soapXml.GetChild2(0) success = soapXml.AddAttribute("xmlns","http://ws.cdyne.com/WeatherWS/") soapXml.NewChild2("ZIP","60187") soapXml.GetRoot2() print soapXml.getXml() + "\n"; # Send the SOAP request responseXml = rest.fullRequestString("POST","/WeatherWS/Weather.asmx",soapXml.getXml()) if (rest.get_LastMethodSuccess() != true) print rest.lastErrorText() + "\n"; exit end # When successful, the response status code will equal 200. if (rest.get_ResponseStatusCode() != 200) # Examine the request/response to see what happened. print "response status code = " + rest.get_ResponseStatusCode().to_s() + "\n"; print "response status text = " + rest.responseStatusText() + "\n"; print "response header: " + rest.responseHeader() + "\n"; print "response body (if any): " + responseXml + "\n"; print "---" + "\n"; print "LastRequestStartLine: " + rest.lastRequestStartLine() + "\n"; print "LastRequestHeader: " + rest.lastRequestHeader() + "\n"; exit end xml = Chilkat::CkXml.new() success = xml.LoadXml(responseXml) # GetXml will emit XML that is nicely indented for human viewing.. print xml.getXml() + "\n"; # A sample response XML is shown below... # To get some information, use ChilkatPath. For example... print "Temperature: " + xml.chilkatPath("soap:Body|GetCityWeatherByZIPResponse|GetCityWeatherByZIPResult|Temperature|*") + "\n"; print "Success." + "\n"; # <?xml version="1.0" encoding="utf-8" ?> # <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> # <soap:Body> # <GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/"> # <GetCityWeatherByZIPResult> # <Success>true</Success> # <ResponseText>City Found</ResponseText> # <State>IL</State> # <City>Wheaton</City> # <WeatherStationCity>West Chicago</WeatherStationCity> # <WeatherID>10</WeatherID> # <Description>Mostly Sunny</Description> # <Temperature>33</Temperature> # <RelativeHumidity>39</RelativeHumidity> # <Wind>VRB5</Wind> # <Pressure>30.33F</Pressure> # <Visibility /> # <WindChill /> # <Remarks /> # </GetCityWeatherByZIPResult> # </GetCityWeatherByZIPResponse> # </soap:Body> # </soap:Envelope> |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.