PureBasic
PureBasic
Simple SOAP Request
See more HTTP Examples
Demonstrates how to send a simple SOAP request.Chilkat PureBasic Downloads
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkXml.pb"
Procedure ChilkatExample()
success.i = 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>
xml.i = CkXml::ckCreate()
If xml.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkXml::setCkTag(xml, "soapenv:Envelope")
CkXml::ckAddAttribute(xml,"xmlns:dat","http://www.dataaccess.com/webservicesserver/")
CkXml::ckAddAttribute(xml,"xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/")
CkXml::ckUpdateChildContent(xml,"soapenv:Header","")
CkXml::ckUpdateChildContent(xml,"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.
CkXml::setCkEmitXmlDecl(xml, 0)
soapRequestBody.s = CkXml::ckGetXml(xml)
endpoint.s = "https://www.dataaccess.com/webservicesserver/numberconversion.wso"
soapAction.s = ""
; For SOAP requests, the standard Content-Type is usually set to "text/xml" or "application/soap+xml"
contentType.s = "text/xml"
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttp::ckClearHeaders(http)
CkHttp::ckSetRequestHeader(http,"SOAPAction",soapAction)
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpStr(http,"POST",endpoint,soapRequestBody,"utf-8",contentType,resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkXml::ckDispose(xml)
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
; Get the XML response body.
responseXml.i = CkXml::ckCreate()
If responseXml.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttpResponse::ckGetBodyXml(resp,responseXml)
statusCode.i = CkHttpResponse::ckStatusCode(resp)
Debug "response status code: " + Str(statusCode)
; If the status code does not indicate succcess, then show the response XML,
; which probably contains error information.
If statusCode <> 200
Debug CkXml::ckGetXml(responseXml)
CkXml::ckDispose(xml)
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
CkXml::ckDispose(responseXml)
ProcedureReturn
EndIf
Debug CkXml::ckGetXml(responseXml)
; 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>
dat_NumberToDollarsResult.s = CkXml::ckGetChildContent(responseXml,"*:Body|*:NumberToDollarsResponse|*:NumberToDollarsResult")
Debug "result: " + dat_NumberToDollarsResult
CkXml::ckDispose(xml)
CkHttp::ckDispose(http)
CkHttpResponse::ckDispose(resp)
CkXml::ckDispose(responseXml)
ProcedureReturn
EndProcedure