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
(Perl) 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.
use 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 = 0; $port = 80; $bAutoReconnect = 1; # 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 != 1) { print $rest->lastErrorText() . "\r\n"; exit; } # 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() . "\r\n"; # Send the SOAP request $responseXml = $rest->fullRequestString("POST","/WeatherWS/Weather.asmx",$soapXml->getXml()); if ($rest->get_LastMethodSuccess() != 1) { print $rest->lastErrorText() . "\r\n"; exit; } # 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() . "\r\n"; print "response status text = " . $rest->responseStatusText() . "\r\n"; print "response header: " . $rest->responseHeader() . "\r\n"; print "response body (if any): " . $responseXml . "\r\n"; print "---" . "\r\n"; print "LastRequestStartLine: " . $rest->lastRequestStartLine() . "\r\n"; print "LastRequestHeader: " . $rest->lastRequestHeader() . "\r\n"; exit; } $xml = chilkat::CkXml->new(); $success = $xml->LoadXml($responseXml); # GetXml will emit XML that is nicely indented for human viewing.. print $xml->getXml() . "\r\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|*") . "\r\n"; print "Success." . "\r\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.