Sample code for 30+ languages & platforms
Lianja

Simple SOAP Request

See more HTTP Examples

Demonstrates how to send a simple SOAP request.

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

// --------------------------------------------------------------------------------
// Also see Chilkat's Online WSDL Code Generator
// to generate code and SOAP Request and Response XML for each operation in a WSDL.
// --------------------------------------------------------------------------------

// Create the following XML to be sent in the SOAP request body.

// <soapenv:Envelope xmlns:dat="http://www.dataaccess.com/webservicesserver/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
//     <soapenv:Header/>
//     <soapenv:Body>
//         <dat:NumberToDollars>
//             <dat:dNum>99.0</dat:dNum>
//         </dat:NumberToDollars>
//     </soapenv:Body>
// </soapenv:Envelope>

loXml = createobject("CkXml")
loXml.Tag = "soapenv:Envelope"
loXml.AddAttribute("xmlns:dat","http://www.dataaccess.com/webservicesserver/")
loXml.AddAttribute("xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/")
loXml.UpdateChildContent("soapenv:Header","")
loXml.UpdateChildContent("soapenv:Body|dat:NumberToDollars|dat:dNum","99.0")

// In a SOAP HTTP request, including the XML declaration (<?xml version="1.0" encoding="UTF-8"?>) in the XML body is generally not required. 
loXml.EmitXmlDecl = .F.
lcSoapRequestBody = loXml.GetXml()

lcEndpoint = "https://www.dataaccess.com/webservicesserver/numberconversion.wso"
lcSoapAction = ""
//  For SOAP requests, the standard Content-Type is usually set to "text/xml" or "application/soap+xml"
lcContentType = "text/xml"

loHttp = createobject("CkHttp")

loHttp.ClearHeaders()
loHttp.SetRequestHeader("SOAPAction",lcSoapAction)

loResp = createobject("CkHttpResponse")
llSuccess = loHttp.HttpStr("POST",lcEndpoint,lcSoapRequestBody,"utf-8",lcContentType,loResp)
if (llSuccess = .F.) then
    ? loHttp.LastErrorText
    release loXml
    release loHttp
    release loResp
    return
endif

// Get the XML response body.
loResponseXml = createobject("CkXml")
loResp.GetBodyXml(loResponseXml)

lnStatusCode = loResp.StatusCode
? "response status code: " + str(lnStatusCode)

// If the status code does not indicate succcess, then show the response XML,
// which probably contains error information.
if (lnStatusCode <> 200) then
    ? loResponseXml.GetXml()
    release loXml
    release loHttp
    release loResp
    release loResponseXml
    return
endif

? loResponseXml.GetXml()

// Parse the successful SOAP response XML.

// This is a sample of the response XML, but the namespace prefixes will be different.
// We can parse the result using "*" for the namespace prefixes (see below).

// <soapenv:Envelope xmlns:dat="http://www.dataaccess.com/webservicesserver/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
//     <soapenv:Header/>
//     <soapenv:Body>
//         <dat:NumberToDollarsResponse>
//             <dat:NumberToDollarsResult>string</dat:NumberToDollarsResult>
//         </dat:NumberToDollarsResponse>
//     </soapenv:Body>
// </soapenv:Envelope>

lcDat_NumberToDollarsResult = loResponseXml.GetChildContent("*:Body|*:NumberToDollarsResponse|*:NumberToDollarsResult")
? "result: " + lcDat_NumberToDollarsResult


release loXml
release loHttp
release loResp
release loResponseXml