gotcha
gotcha copied to clipboard
High level HTTP client with a got-like API
gotcha
Gotcha is an alternative to Go's http client, with an API inspired by got. It can interface with other HTTP packages through an adapter.
Aadapter implementations for fhttp, cclient & fasthttp can be found in the adapters directory.
Usage
Top-Level API
Gotcha exposes a top-level API to make quick and simple requests:
package main
import (
"fmt"
"github.com/sleeyax/gotcha"
"log"
)
func main() {
res, err := gotcha.Get("https://sleeyax.dev")
if err != nil {
log.Fatal(err)
}
fmt.Println(res.Text())
// Output: <!DOCTYPE html>...
}
Configuration options
When you require further customization of the request, you can do so by specifying configuration Options
:
package main
import (
"fmt"
"github.com/sleeyax/gotcha"
"log"
)
func main() {
res, _ := gotcha.Post("https://httpbin.org/anything", &gotcha.Options{
Json: gotcha.JSON{
"hello": "world",
},
FollowRedirect: false,
})
body, _ := res.Json()
defer res.Close()
fmt.Println(body["data"])
// Output: {"hello": "world"}
}
Client
For advanced requests, create a client instance. Clients are configurable, extendable & reusable. This gives you fine-grained control over the request:
package main
import (
"fmt"
"github.com/sleeyax/gotcha"
"io"
"log"
"net/http"
"strings"
)
func main() {
client, _ := gotcha.NewClient(&gotcha.Options{
PrefixURL: "https://httpbin.org/",
Headers: http.Header{
"user-agent": {"gotcha by Sleeyax (https://github.com/sleeyax/gotcha)"},
},
})
logClient, _ := client.Extend(&gotcha.Options{
Hooks: gotcha.Hooks{
Init: []gotcha.InitHook{
func(o *gotcha.Options) {
fmt.Println(fmt.Sprintf("about to send a request to %s with method %s", o.FullUrl.String(), o.Method))
},
},
},
})
res, _ := logClient.DoRequest("PUT", "anything", &gotcha.Options{
Body: io.NopCloser(strings.NewReader("hello world!")),
})
defer res.Close()
// Output: "about to send a request to https://httpbin.org/anything with method PUT"
}
See examples for more adapter-specific examples.