Skip to content

Repository files navigation

rq Build StatusGo Reportcodecov

A nicer interface for golang stdlib HTTP client

Documents

Why?

Because golang HTTP client is a pain in the a...

Features

  • Compatible with golang http stdlib: http.Request, http.Response and http.Cookie
  • Step by step to build your request
  • Better HTTP client
  • Better cookie jar
  • Import/export allow we save/transfer requests in JSON
  • Default setting: example default User-Agent or Accept-Language

Installation

go get -u github.com/ddo/rq

Getting started

Simple

import"net/http"import"github.com/ddo/rq"r:=rq.Get("https://httpbin.org/get")
// query https://httpbin.org/get?q=1&q=2&q=3&_=123456r.Qs("q", "1", "2")
r.Qs("q", "3")
r.Qs("_", "123456")
// send with golang default HTTP clientres, err:=http.DefaultClient.Do(r.ParseRequest())
deferres.Body.Close()

Custom client

In case you did not know that golang default http.Client has no timeout. use rq/client which has 180s timeout by default

import"github.com/ddo/rq"import"github.com/ddo/rq/client"r:=rq.Post("https://httpbin.org/post")
// queryr.Qs("_", "123456")
// Formr.Send("data", "data value")
r.Send("extra", "extra value")
// use default rq client// true to tell #Send to read all the response boby when returndata, res, err:=client.Send(r, true)
// no need to close res.Body// read = false -> you need to call res.Body when done reading

Headers

r:=rq.Post("https://httpbin.org/post")
r.Set("Content-Type", "application/json")
r.Set("User-Agent", "ddo/rq")

Raw body

r:=rq.Post("https://httpbin.org/post")
r.SendRaw(strings.NewReader("raw data binary or json"))

Client Doc

Default

// by default timeout = 3min// no cookie jar// and stops after 10 consecutive requests (10 redirects)customClient:=client.New(nil)

Custom Options

import"github.com/ddo/rq/client/jar"cookieJar:=jar.New()
// custom timeout = 10s and cookie jarcustomClient:=client.New(&Option{
Timeout: time.Second*10,
jar: cookieJar,
})

Default settings

// set default User-AgentdefaultRq:=rq.Get("")
defaultRq.Set("User-Agent", "github.com/ddo/rq")
customClient:=client.New(&Option{
DefaultRq: defaultRq,
})
// from now all the requests called via this customClient// gonna have the User-Agent header = "github.com/ddo/rq"// if User-Agent header in request is not set

Redirect

  • Default client stops after 10 consecutive requests
  • Or you can use client.NoRedirect to disable redirect
client.New(&Option{
CheckRedirect: client.NoCheckRedirect,
})

Cookies Doc

import"github.com/ddo/rq/client/jar"cookieJar:=jar.New()
customClient:=client.New(&client.Option{
Jar: cookieJar,
})
// get all cookies by hostnamecookies, err:=cookieJar.Get("httpbin.org")
// get a cookie by hostname and namecookie, err:=cookieJar.GetByName("httpbin.org", "cookiename").
// set cookieserr:=cookieJar.Set("httpbin.org", cookies)
// set a cookieerr:=cookieJar.SetOne("httpbin.org", cookie)
// clear the cookie jarerr:=cookieJar.Clear("httpbin.org")
// delete a cookie by it's nameerr:=cookieJar.Delete("httpbin.org", "cookiename")

Debug

Set env DLOG=* to enable logger to see request activities

TODO

List here #1

About

A nicer interface for golang stdlib HTTP client

Topics

Resources

Stars

52 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages