Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loRest
LOCAL lnBTls
LOCAL lnPort
LOCAL lnBAutoReconnect
LOCAL loSoapXml
LOCAL lcResponseXml
LOCAL loXml

lnSuccess = 0

* 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.
* --------------------------------------------------------------------------------

loRest = CreateObject('Chilkat.Rest')

* 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).
lnBTls = 0
lnPort = 80
lnBAutoReconnect = 1
* In this particular case, it is important to connect to "wsf.cdyne.com", not "ws.cdyne.com"...
lnSuccess = loRest.Connect("wsf.cdyne.com",lnPort,lnBTls,lnBAutoReconnect)
IF (lnSuccess <> 1) THEN
    ? loRest.LastErrorText
    RELEASE loRest
    CANCEL
ENDIF

* Add request headers:
lnSuccess = loRest.AddHeader("Content-Type","text/xml; charset=utf-8")
lnSuccess = loRest.AddHeader("SOAPAction","http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP")

* Build the SOAP XML request body.
loSoapXml = CreateObject('Chilkat.Xml')

loSoapXml.Tag = "soap:Envelope"
lnSuccess = loSoapXml.AddAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance")
lnSuccess = loSoapXml.AddAttribute("xmlns:xsd","http://www.w3.org/2001/XMLSchema")
lnSuccess = loSoapXml.AddAttribute("xmlns:soap","http://schemas.xmlsoap.org/soap/envelope/")

loSoapXml.NewChild2("soap:Body","")
lnSuccess = loSoapXml.GetChild2(0)
loSoapXml.NewChild2("GetCityWeatherByZIP","")
lnSuccess = loSoapXml.GetChild2(0)
lnSuccess = loSoapXml.AddAttribute("xmlns","http://ws.cdyne.com/WeatherWS/")
loSoapXml.NewChild2("ZIP","60187")
loSoapXml.GetRoot2()

? loSoapXml.GetXml()

* Send the SOAP request
lcResponseXml = loRest.FullRequestString("POST","/WeatherWS/Weather.asmx",loSoapXml.GetXml())
IF (loRest.LastMethodSuccess <> 1) THEN
    ? loRest.LastErrorText
    RELEASE loRest
    RELEASE loSoapXml
    CANCEL
ENDIF

* When successful, the response status code will equal 200.
IF (loRest.ResponseStatusCode <> 200) THEN
    * Examine the request/response to see what happened.
    ? "response status code = " + STR(loRest.ResponseStatusCode)
    ? "response status text = " + loRest.ResponseStatusText
    ? "response header: " + loRest.ResponseHeader
    ? "response body (if any): " + lcResponseXml
    ? "---"
    ? "LastRequestStartLine: " + loRest.LastRequestStartLine
    ? "LastRequestHeader: " + loRest.LastRequestHeader
    RELEASE loRest
    RELEASE loSoapXml
    CANCEL
ENDIF

loXml = CreateObject('Chilkat.Xml')
lnSuccess = loXml.LoadXml(lcResponseXml)

* GetXml will emit XML that is nicely indented for human viewing..
? loXml.GetXml()

* A sample response XML is shown below...

* To get some information, use ChilkatPath.  For example...
? "Temperature: " + loXml.ChilkatPath("soap:Body|GetCityWeatherByZIPResponse|GetCityWeatherByZIPResult|Temperature|*")

? "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>

RELEASE loRest
RELEASE loSoapXml
RELEASE loXml