Sample code for 30+ languages & platforms
Visual FoxPro

Simple SOAP Request

See more HTTP Examples

Demonstrates how to send a simple SOAP request.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loXml
LOCAL lcSoapRequestBody
LOCAL lcEndpoint
LOCAL lcSoapAction
LOCAL lcContentType
LOCAL loHttp
LOCAL loResp
LOCAL loResponseXml
LOCAL lnStatusCode
LOCAL lcDat_NumberToDollarsResult

lnSuccess = 0

* --------------------------------------------------------------------------------
* 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('Chilkat.Xml')
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 = 0
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('Chilkat.Http')

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

loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpStr("POST",lcEndpoint,lcSoapRequestBody,"utf-8",lcContentType,loResp)
IF (lnSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loXml
    RELEASE loHttp
    RELEASE loResp
    CANCEL
ENDIF

* Get the XML response body.
loResponseXml = CreateObject('Chilkat.Xml')
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
    CANCEL
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