Goat, is an HTTP client built on top of a standard Go http package, that is extremely easy to configure; no googling required. The idea is similar to https://github.com/vspaz/pyclient it supports out of the box:
- TLS,
- basic auth
- delayed retries on specific errors
- timeouts (connection, read, idle etc.)
- keep-alive connections
- extra helpers
- logging
- etc.
still, if you don't wish any configuration, you can you use it as is with default parameters. Please, see the examples below:
go get -u github.com/vspaz/goat/pkg/ghttp@v1.2.1
package main
import (
"github.com/vspaz/goat/pkg/ghttp"
"log"
)
func main() {
client := ghttp.NewClientBuilder().
WithHost("https://httpbin.org"). // optional
WithAuth("user", "user-password"). // optional
WithTls("cert.pem", "cert.pem", "ca.crt"). // optional
WithTlsHandshakeTimeout(10.0). // optional
WithUserAgent("goat"). // optional
WithRetry(3, []int{500, 503}). // optional
WithDelay(0.5). // optional
WithResponseTimeout(10.0). // optional
WithConnectionTimeout(2.0). // optional
WithHeadersReadTimeout(2.0). // optional
WithLogLevel("info"). // optional
Build()
resp, err := client.DoGet("/get", nil, nil)
if err != nil {
log.Fatal(err)
}
log.Println(resp.IsOk())
// or just
client = ghttp.NewClientBuilder().Build()
resp, err = client.DoGet("https://httpbin.org/get", nil, nil)
if err != nil {
log.Fatal(err)
}
log.Println(resp.IsOk())
}
package main
import (
"github.com/vspaz/goat/pkg/ghttp"
"log"
)
type HttpBinGetResponse struct {
Args struct {
} `json:"args"`
Headers struct {
AcceptEncoding string `json:"Accept-Encoding"`
Authorization string `json:"Authorization"`
Host string `json:"Host"`
UserAgent string `json:"User-Agent"`
XAmznTraceId string `json:"X-Amzn-Trace-Id"`
} `json:"headers"`
Origin string `json:"origin"`
Url string `json:"url"`
}
func main() {
client := ghttp.NewClientBuilder().Build()
resp, err := client.DoGet("https://httpbin.org/get", nil, nil)
if err != nil {
log.Fatal(err)
}
log.Println(resp.IsOk())
log.Println(resp.ToString())
}
package main
import (
"github.com/vspaz/goat/pkg/ghttp"
"log"
)
func main() {
client := ghttp.NewClientBuilder().Build()
resp, err := client.DoPost(
"https://httpbin.org/post",
map[string]string{"Content-Type": "application/json"},
map[string]string{"param": "value"},
map[string]string{"foo": "bar"})
if err != nil {
log.Fatal(err)
}
log.Println(resp.IsOk())
log.Println(resp.ToString())
}