Lua Requires Chilkat v11.0.0+
Lua
Send SOAP 1.2 Request to Web Service Requiring Authentication
See more HTTP Examples
This example demonstrates sending a SOAP 1.2 request to a web service that requires both HTTP authentication in the Authorization request header, as well as a service-defined password in the XML body of the request.Chilkat Lua Downloads
local chilkat = require("chilkat")
-- This example assumes the Chilkat HTTP 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 http = chilkat.Http.new()
-- We are sending the following POST:
-- POST /wsSome_Testes/Service.asmx HTTP/1.1
-- Host: www.something.com
-- Content-Type: application/soap+xml; charset=utf-8
-- Content-Length: length
--
-- <?xml version="1.0" encoding="utf-8"?>
-- <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
-- <soap12:Body>
-- <GetXYZbyABC xmlns="http://tempuri.org/">
-- <ABCBEN>string</ABCBEN>
-- <ABC>string</ABC>
-- <NumLocal>int</NumLocal>
-- <Password>string</Password>
-- <MsgErro>string</MsgErro>
-- </GetXYZbyABC>
-- </soap12:Body>
-- </soap12:Envelope>
--
-- First, specify the login/password for the Authorization request header (not shown in the headers above).
http.login = "YOUR_LOGIN"
-- The need for a login domain depends on the web service..
http.login_domain = "YOUR_DOMAIN"
http.password = "YOUR_PASSWORD"
-- Build the SOAP XML shown above:
-- Replace VAL_ABCBEN, VAL_ABC, VAL_NUMLOCAL, and YOUR_SOAP_BODY_PASSWORD with actual values..
local xml = chilkat.Xml.new()
xml.tag = "soap12:Envelope"
xml:add_attribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
xml:add_attribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema")
xml:add_attribute("xmlns:soap12", "http://www.w3.org/2003/05/soap-envelope")
xml:update_attr_at("soap12:Body|GetXYZbyABC", true, "xmlns", "http://tempuri.org/")
xml:update_child_content("soap12:Body|GetXYZbyABC|ABCBEN", "VAL_ABCBEN")
xml:update_child_content("soap12:Body|GetXYZbyABC|ABC", "VAL_ABC")
xml:update_child_content("soap12:Body|GetXYZbyABC|NumLocal", "VAL_NUMLOCAL")
xml:update_child_content("soap12:Body|GetXYZbyABC|Password", "YOUR_SOAP_BODY_PASSWORD")
xml:update_child_content("soap12:Body|GetXYZbyABC|MsgErro", "x")
-- We don't need to specify the Content-Length or Host headers. Chilkat automatically adds them.
-- Send the request...
local resp = chilkat.HttpResponse.new()
local success = http:http_str("POST", "https://www.something.com/wsSome_Testes/Service.asmx", xml:get_xml(), "utf-8", "application/soap+xml", resp)
if not success then
print(http.last_error_text)
return
end
print("Response Status Code = " .. resp.status_code)
local respXml = chilkat.Xml.new()
respXml:load_xml(resp.body_str)
print("Response XML:")
print(respXml:get_xml())
-- The response XML should look like this:
-- <?xml version="1.0" encoding="utf-8"?>
-- <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
-- <soap12:Body>
-- <GetXYZbyABCResponse xmlns="http://tempuri.org/">
-- <GetXYZbyABCResult>int</GetXYZbyABCResult>
-- <MsgErro>string</MsgErro>
-- </GetXYZbyABCResponse>
-- </soap12:Body>
-- </soap12:Envelope>