Sample code for 30+ languages & platforms
PureBasic

SOAP Web Service (HTTP POST)

Demonstrates how to call PostXml to call a SOAP web service.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkXml.pb"

Procedure ChilkatExample()

    success.i = 0

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

    ; This example uses a live web service at:
    ; http://www.webservicex.net/uklocation.asmx
    ; It gets the UK town,Postcode and County by Postcode(First Section of Post Code)

    ; The SOAP XML will look like this:
    ; <?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>
    ;     <GetUKLocationByPostCode xmlns="http://www.webserviceX.NET">
    ;       <PostCode>string</PostCode>
    ;     </GetUKLocationByPostCode>
    ;   </soap:Body>
    ; </soap:Envelope>

    ; For this example's sake, we'll load the XML from a file.  We'll test using PostCode "E3".  
    ; The SOAP XML for this example may be downloaded from:
    ; http://www.chilkatsoft.com/testData/ukPostCodeSoap.xml
    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkXml::ckLoadXmlFile(xml,"ukPostCodeSoap.xml")
    If success = 0
        Debug CkXml::ckLastErrorText(xml)
        CkXml::ckDispose(xml)
        ProcedureReturn
    EndIf

    strXml.s = CkXml::ckGetXml(xml)

    responseStatusCode.i
    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; We'll need to add this in the HTTP header:
    ; SOAPAction: "http://www.webserviceX.NET/GetUKLocationByPostCode"
    CkHttp::ckSetRequestHeader(http,"SOAPAction","http://www.webserviceX.NET/GetUKLocationByPostCode")

    ; The endpoint for this soap service is:
    endPoint.s = "http://www.webservicex.net/uklocation.asmx"

    ; Note: This particular web service was live and functioning at the time this example
    ; was written.  It is possible that as time progresses, this web service will no longer
    ; be availble...
    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpStr(http,"POST",endPoint,strXml,"utf-8","text/xml",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkXml::ckDispose(xml)
        CkHttp::ckDispose(http)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    responseStatusCode = CkHttpResponse::ckStatusCode(resp)
    ; You may wish to verify that the responseStatusCode equals 200...
    Debug "Response Status Code: " + Str(responseStatusCode)

    ; You may examine the exact HTTP header sent with the POST like this:
    Debug "LastHeader:"
    Debug CkHttp::ckLastHeader(http)

    ; Examine the XML returned by the web service:
    Debug "XML Response:"
    xmlResp.i = CkXml::ckCreate()
    If xmlResp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::ckLoadXml(xmlResp,CkHttpResponse::ckBodyStr(resp))
    Debug CkXml::ckGetXml(xmlResp)

    ; Use this online tool to generate parsing code from response XML: 
    ; Generate Parsing Code from XML


    CkXml::ckDispose(xml)
    CkHttp::ckDispose(http)
    CkHttpResponse::ckDispose(resp)
    CkXml::ckDispose(xmlResp)


    ProcedureReturn
EndProcedure