Sample code for 30+ languages & platforms
Lua Requires Chilkat v11.0.0+

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

Lua
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>