Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tiaguinho/gosoap
🦉SOAP package for Go
https://github.com/tiaguinho/gosoap
go golang gosoap soap soap-client soap-messages
Last synced: 4 days 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 (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-03-03T15:45:35.000Z (11 months ago)
- Last Synced: 2025-01-25T12:03:33.235Z (11 days ago)
- Topics: go, golang, gosoap, soap, soap-client, soap-messages
- Language: Go
- Homepage:
- Size: 111 KB
- Stars: 519
- Watchers: 13
- Forks: 181
- Open Issues: 28
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Go Soap [![Build Status](https://travis-ci.org/tiaguinho/gosoap.svg?branch=master)](https://travis-ci.org/tiaguinho/gosoap) [![GoDoc](https://godoc.org/github.com/tiaguinho/gosoap?status.png)](https://godoc.org/github.com/tiaguinho/gosoap) [![Go Report Card](https://goreportcard.com/badge/github.com/tiaguinho/gosoap)](https://goreportcard.com/report/github.com/tiaguinho/gosoap) [![Coverage Status](https://coveralls.io/repos/github/tiaguinho/gosoap/badge.svg?branch=master)](https://coveralls.io/github/tiaguinho/gosoap?branch=master) [![patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](https://www.patreon.com/temporin) [![Known Vulnerabilities](https://snyk.io/test/github/tiaguinho/gosoap/badge.svg)](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 mainimport (
"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 mainimport (
"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",
},
},
}
```