Gosoap
🦉SOAP package for Go
**gosoap** is a 🦉SOAP package for Go The project is written primarily in Go, distributed under the MIT License license, first published in 2017. Key topics include: go, golang, gosoap, soap, soap-client.
Latest release: v1.4.4
November 23, 2020View Changelog →
Go Soap

package to help with SOAP integrations (client)
Install
bashgo get github.com/tiaguinho/gosoap
Examples
Basic use
gopackage main import ( "encoding/xml" "log" "net/http" "time" "github.com/tiaguinho/gosoap" ) // GetIPLocationResponse will hold the Soap response type GetIPLocationResponse struct { GetIPLocationResult string `xml:"GetIpLocationResult"` } // GetIPLocationResult will type GetIPLocationResult struct { XMLName xml.Name `xml:"GeoIP"` Country string `xml:"Country"` State string `xml:"State"` } var ( r GetIPLocationResponse ) func main() { httpClient := &http.Client{ Timeout: 1500 * time.Millisecond, } soap, err := gosoap.SoapClient("http://wsgeoip.lavasoft.com/ipservice.asmx?WSDL", httpClient) if err != nil { log.Fatalf("SoapClient error: %s", err) } // Use gosoap.ArrayParams to support fixed position params params := gosoap.Params{ "sIp": "8.8.8.8", } res, err := soap.Call("GetIpLocation", params) if err != nil { log.Fatalf("Call error: %s", err) } res.Unmarshal(&r) // GetIpLocationResult will be a string. We need to parse it to XML result := GetIPLocationResult{} err = xml.Unmarshal([]byte(r.GetIPLocationResult), &result) if err != nil { log.Fatalf("xml.Unmarshal error: %s", err) } if result.Country != "US" { log.Fatalf("error: %+v", r) } log.Println("Country: ", result.Country) log.Println("State: ", result.State) }
Set Custom Envelope Attributes
gopackage main import ( "encoding/xml" "log" "net/http" "time" "github.com/tiaguinho/gosoap" ) // GetIPLocationResponse will hold the Soap response type GetIPLocationResponse struct { GetIPLocationResult string `xml:"GetIpLocationResult"` } // GetIPLocationResult will type GetIPLocationResult struct { XMLName xml.Name `xml:"GeoIP"` Country string `xml:"Country"` State string `xml:"State"` } var ( r GetIPLocationResponse ) func main() { httpClient := &http.Client{ Timeout: 1500 * time.Millisecond, } // set custom envelope gosoap.SetCustomEnvelope("soapenv", map[string]string{ "xmlns:soapenv": "http://schemas.xmlsoap.org/soap/envelope/", "xmlns:tem": "http://tempuri.org/", }) soap, err := gosoap.SoapClient("http://wsgeoip.lavasoft.com/ipservice.asmx?WSDL", httpClient) if err != nil { log.Fatalf("SoapClient error: %s", err) } // Use gosoap.ArrayParams to support fixed position params params := gosoap.Params{ "sIp": "8.8.8.8", } res, err := soap.Call("GetIpLocation", params) if err != nil { log.Fatalf("Call error: %s", err) } res.Unmarshal(&r) // GetIpLocationResult will be a string. We need to parse it to XML result := GetIPLocationResult{} err = xml.Unmarshal([]byte(r.GetIPLocationResult), &result) if err != nil { log.Fatalf("xml.Unmarshal error: %s", err) } if result.Country != "US" { log.Fatalf("error: %+v", r) } log.Println("Country: ", result.Country) log.Println("State: ", result.State) }
Set Header params
gosoap.HeaderParams = gosoap.SliceParams{ xml.StartElement{ Name: xml.Name{ Space: "auth", Local: "Login", }, }, "user", xml.EndElement{ Name: xml.Name{ Space: "auth", Local: "Login", }, }, xml.StartElement{ Name: xml.Name{ Space: "auth", Local: "Password", }, }, "P@ssw0rd", xml.EndElement{ Name: xml.Name{ Space: "auth", Local: "Password", }, }, }
Contributors
Showing top 12 contributors by commit count.
This article is auto-generated from tiaguinho/gosoap via the GitHub API.Last fetched: 6/20/2026
