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