Sample code for 30+ languages & platforms
Go

Simple SOAP Request

See more HTTP Examples

Demonstrates how to send a simple SOAP request.

Chilkat Go Downloads

Go
    success := false

    // --------------------------------------------------------------------------------
    // 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 := chilkat.NewXml()
    xml.SetTag("soapenv:Envelope")
    xml.AddAttribute("xmlns:dat","http://www.dataaccess.com/webservicesserver/")
    xml.AddAttribute("xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/")
    xml.UpdateChildContent("soapenv:Header","")
    xml.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. 
    xml.SetEmitXmlDecl(false)
    soapRequestBody := xml.GetXml()

    endpoint := "https://www.dataaccess.com/webservicesserver/numberconversion.wso"
    soapAction := ""
    //  For SOAP requests, the standard Content-Type is usually set to "text/xml" or "application/soap+xml"
    contentType := "text/xml"

    http := chilkat.NewHttp()

    http.ClearHeaders()
    http.SetRequestHeader("SOAPAction",soapAction)

    resp := chilkat.NewHttpResponse()
    success = http.HttpStr("POST",endpoint,*soapRequestBody,"utf-8",contentType,resp)
    if success == false {
        fmt.Println(http.LastErrorText())
        xml.DisposeXml()
        http.DisposeHttp()
        resp.DisposeHttpResponse()
        return
    }

    // Get the XML response body.
    responseXml := chilkat.NewXml()
    resp.GetBodyXml(responseXml)

    statusCode := resp.StatusCode()
    fmt.Println("response status code: ", statusCode)

    // If the status code does not indicate succcess, then show the response XML,
    // which probably contains error information.
    if statusCode != 200 {
        fmt.Println(*responseXml.GetXml())
        xml.DisposeXml()
        http.DisposeHttp()
        resp.DisposeHttpResponse()
        responseXml.DisposeXml()
        return
    }

    fmt.Println(*responseXml.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>

    dat_NumberToDollarsResult := responseXml.GetChildContent("*:Body|*:NumberToDollarsResponse|*:NumberToDollarsResult")
    fmt.Println("result: ", *dat_NumberToDollarsResult)

    xml.DisposeXml()
    http.DisposeHttp()
    resp.DisposeHttpResponse()
    responseXml.DisposeXml()