https://github.com/tiaguinho/gosoap
🦉SOAP package for Go
https://github.com/tiaguinho/gosoap
go golang gosoap soap soap-client soap-messages
Last synced: about 1 year ago
JSON representation
🦉SOAP package for Go
- Host: GitHub
- URL: https://github.com/tiaguinho/gosoap
- Owner: tiaguinho
- License: mit
- Created: 2017-06-09T01:27:46.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2024-03-03T15:45:35.000Z (over 2 years ago)
- Last Synced: 2025-04-08T01:36:44.786Z (about 1 year ago)
- Topics: go, golang, gosoap, soap, soap-client, soap-messages
- Language: Go
- Homepage:
- Size: 111 KB
- Stars: 524
- Watchers: 12
- Forks: 181
- Open Issues: 28
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Go Soap [](https://travis-ci.org/tiaguinho/gosoap) [](https://godoc.org/github.com/tiaguinho/gosoap) [](https://goreportcard.com/report/github.com/tiaguinho/gosoap) [](https://coveralls.io/github/tiaguinho/gosoap?branch=master) [](https://www.patreon.com/temporin) [](https://snyk.io/test/github/tiaguinho/gosoap)
package to help with SOAP integrations (client)
### Install
```bash
go get github.com/tiaguinho/gosoap
```
### Examples
#### Basic use
```go
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
```go
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
```go
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",
},
},
}
```