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
(Tcl) 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.
load ./chilkat.dll # 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. # -------------------------------------------------------------------------------- set rest [new_CkRest] # 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). set bTls 0 set port 80 set bAutoReconnect 1 # In this particular case, it is important to connect to "wsf.cdyne.com", not "ws.cdyne.com"... set success [CkRest_Connect $rest "wsf.cdyne.com" $port $bTls $bAutoReconnect] if {$success != 1} then { puts [CkRest_lastErrorText $rest] delete_CkRest $rest exit } # Add request headers: set success [CkRest_AddHeader $rest "Content-Type" "text/xml; charset=utf-8"] set success [CkRest_AddHeader $rest "SOAPAction" "http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP"] # Build the SOAP XML request body. set soapXml [new_CkXml] CkXml_put_Tag $soapXml "soap:Envelope" set success [CkXml_AddAttribute $soapXml "xmlns:xsi" "http://www.w3.org/2001/XMLSchema-instance"] set success [CkXml_AddAttribute $soapXml "xmlns:xsd" "http://www.w3.org/2001/XMLSchema"] set success [CkXml_AddAttribute $soapXml "xmlns:soap" "http://schemas.xmlsoap.org/soap/envelope/"] CkXml_NewChild2 $soapXml "soap:Body" "" set success [CkXml_GetChild2 $soapXml 0] CkXml_NewChild2 $soapXml "GetCityWeatherByZIP" "" set success [CkXml_GetChild2 $soapXml 0] set success [CkXml_AddAttribute $soapXml "xmlns" "http://ws.cdyne.com/WeatherWS/"] CkXml_NewChild2 $soapXml "ZIP" "60187" CkXml_GetRoot2 $soapXml puts [CkXml_getXml $soapXml] # Send the SOAP request set responseXml [CkRest_fullRequestString $rest "POST" "/WeatherWS/Weather.asmx" [CkXml_getXml $soapXml]] if {[CkRest_get_LastMethodSuccess $rest] != 1} then { puts [CkRest_lastErrorText $rest] delete_CkRest $rest delete_CkXml $soapXml exit } # When successful, the response status code will equal 200. if {[CkRest_get_ResponseStatusCode $rest] != 200} then { # Examine the request/response to see what happened. puts "response status code = [CkRest_get_ResponseStatusCode $rest]" puts "response status text = [CkRest_responseStatusText $rest]" puts "response header: [CkRest_responseHeader $rest]" puts "response body (if any): $responseXml" puts "---" puts "LastRequestStartLine: [CkRest_lastRequestStartLine $rest]" puts "LastRequestHeader: [CkRest_lastRequestHeader $rest]" delete_CkRest $rest delete_CkXml $soapXml exit } set xml [new_CkXml] set success [CkXml_LoadXml $xml $responseXml] # GetXml will emit XML that is nicely indented for human viewing.. puts [CkXml_getXml $xml] # A sample response XML is shown below... # To get some information, use ChilkatPath. For example... puts "Temperature: [CkXml_chilkatPath $xml soap:Body|GetCityWeatherByZIPResponse|GetCityWeatherByZIPResult|Temperature|*]" puts "Success." # <?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> delete_CkRest $rest delete_CkXml $soapXml delete_CkXml $xml |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.