Lua
Lua
Making SOAP Requests using the REST API
See more REST Examples
There'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.
Chilkat Lua Downloads
local chilkat = 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.
-- --------------------------------------------------------------------------------
local rest = chilkat.Rest.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).
local bTls = false
local port = 80
local bAutoReconnect = true
-- In this particular case, it is important to connect to "wsf.cdyne.com", not "ws.cdyne.com"...
local success = rest:connect("wsf.cdyne.com", port, bTls, bAutoReconnect)
if not success then
print(rest.last_error_text)
return
end
-- Add request headers:
success = rest:add_header("Content-Type", "text/xml; charset=utf-8")
success = rest:add_header("SOAPAction", "http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP")
-- Build the SOAP XML request body.
local soapXml = chilkat.Xml.new()
soapXml.tag = "soap:Envelope"
success = soapXml:add_attribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
success = soapXml:add_attribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema")
success = soapXml:add_attribute("xmlns:soap", "http://schemas.xmlsoap.org/soap/envelope/")
soapXml:new_child2("soap:Body", "")
success = soapXml:get_child2(0)
soapXml:new_child2("GetCityWeatherByZIP", "")
success = soapXml:get_child2(0)
success = soapXml:add_attribute("xmlns", "http://ws.cdyne.com/WeatherWS/")
soapXml:new_child2("ZIP", "60187")
soapXml:get_root2()
print(soapXml:get_xml())
-- Send the SOAP request
local responseXml = rest:full_request_string("POST", "/WeatherWS/Weather.asmx", soapXml:get_xml())
if not rest.last_method_success then
print(rest.last_error_text)
return
end
-- When successful, the response status code will equal 200.
if rest.response_status_code ~= 200 then
-- Examine the request/response to see what happened.
print("response status code = " .. rest.response_status_code)
print("response status text = " .. rest.response_status_text)
print("response header: " .. rest.response_header)
print("response body (if any): " .. responseXml)
print("---")
print("LastRequestStartLine: " .. rest.last_request_start_line)
print("LastRequestHeader: " .. rest.last_request_header)
return
end
local xml = chilkat.Xml.new()
success = xml:load_xml(responseXml)
-- GetXml will emit XML that is nicely indented for human viewing..
print(xml:get_xml())
-- A sample response XML is shown below...
-- To get some information, use ChilkatPath. For example...
print("Temperature: " .. xml:chilkat_path("soap:Body|GetCityWeatherByZIPResponse|GetCityWeatherByZIPResult|Temperature|*"))
print("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>