tiaguinho
gosoap
Go

🦉SOAP package for Go

Last updated Jun 25, 2026
543
Stars
183
Forks
31
Issues
0
Stars/day
Attention Score
31
Language breakdown
Go 100.0%
Files click to expand
README

Go Soap Build Status GoDoc Go Report Card Coverage Status patreon Known Vulnerabilities

package to help with SOAP integrations (client)

Install

go get github.com/tiaguinho/gosoap

Examples

Basic use

package 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

package 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

soap.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",
			},
		},
	}
🔗 More in this category

© 2026 GitRepoTrend · tiaguinho/gosoap · Updated daily from GitHub