gclient

package module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 17, 2021 License: Apache-2.0 Imports: 8 Imported by: 0

README

gclient

Build Status GoDoc Foundation Go Report Card

http.Client & http.Request implementation for golang

documentation

go to ducumentation

How to use gclient

go get github.com/jianzhiyao/gclient

Client

New a client
cli := gclient.New(
		//with context
		gclient.OptContext(context.Background()),
		//set timeout
		gclient.OptTimeout(3*time.Second),
		//retry if get error after requesting
		gclient.OptRetry(3),
		//enable compression: br
		gclient.OptEnableBr(),
		//enable compression: gzip
		gclient.OptEnableGzip(),
		//enable compression: deflate
		gclient.OptEnableDeflate(),
		//set header for client level
		gclient.OptHeader("token", "request_token"),
		gclient.OptHeaders(map[string][]string{
			`accept-language`: []string{
				`zh-CN`,
				`zh;q=0.9`,
				`en;q=0.8`,
				`en-US;q=0.7`,
			},
		}),
		//set cookie jar for http.Client
		gclient.OptCookieJar(nil),
		//set transport for http.Client
		gclient.OptTransport(nil),
	)

Request

Simple request
cli := gclient.New()
if resp, err := cli.Do(http.MethodHead, "http://exmaple.com/job.json"); err != nil {
	fmt.Println(err)
} else {
	fmt.Println(resp.String())
}
Complex request

supported methods

  • NewRequest
  • NewRequestGet
  • NewRequestHead
  • NewRequestPost
  • NewRequestPut
  • NewRequestPatch
  • NewRequestDelete
  • NewRequestConnect
  • NewRequestOptions
  • NewRequestTrace
if req, err := gclient.NewRequest(http.MethodGet, "https://exmaple.com"); err != nil {
	fmt.Println(err)
	} else {
	var data Data
	if err := req.Json(&Data{}); err != nil {
		fmt.Println(err)
	} else {
		resp, err := cli.DoRequest(req)
	}
}

Response

Status
fmt.Println(resp.Status())
fmt.Println(resp.StatusCode())
Body
Get response content as string
if body, err := resp.String(); err != nil {
	fmt.Println(err)
} else {
	fmt.Println(body)
}
Get response content as []byte
if body, err := resp.Bytes(); err != nil {
	fmt.Println(err)
} else {
	fmt.Println(body)
}
Unmarshal response content as json
var a Resp
if err := resp.JsonUnmarshal(&a); err != nil {
	fmt.Println(err)
} else {
	fmt.Println(a)
}
Unmarshal response content as yaml
var a Resp
if err := resp.YamlUnmarshal(&a); err != nil {
	fmt.Println(err)
} else {
	fmt.Println(a)
}
Unmarshal response content as xml
var a Resp
if err := resp.XmlUnmarshal(&a); err != nil {
	fmt.Println(err)
} else {
	fmt.Println(a)
}

Benchmark

Gclient VS. net/http.Client

# requests
BenchmarkClient_GClientGet-12    	        2500	    814623 ns/op
BenchmarkClient_HttpClientGet-12    	    2024	    870806 ns/op

# new request
Benchmark_Gclient_NewRequest-12    	  799914	      1350 ns/op
Benchmark_Http_NewRequest-12    	  799903	      1321 ns/op

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewRequest added in v0.0.6

func NewRequest(method, url string) (*request.Request, error)

NewRequest new request

func NewRequestConnect added in v0.1.0

func NewRequestConnect(url string) (*request.Request, error)

NewRequestConnect new request of http.MethodConnect

func NewRequestDelete added in v0.1.0

func NewRequestDelete(url string) (*request.Request, error)

NewRequestDelete new request of http.MethodDelete

func NewRequestGet added in v0.1.0

func NewRequestGet(url string) (*request.Request, error)

NewRequestGet new request of http.MethodGet

func NewRequestHead added in v0.1.0

func NewRequestHead(url string) (*request.Request, error)

NewRequestHead new request of http.MethodHead

func NewRequestOptions added in v0.1.0

func NewRequestOptions(url string) (*request.Request, error)

NewRequestOptions new request of http.MethodOptions

func NewRequestPatch added in v0.1.0

func NewRequestPatch(url string) (*request.Request, error)

NewRequestPatch new request of http.MethodPatch

func NewRequestPost added in v0.1.0

func NewRequestPost(url string) (*request.Request, error)

NewRequestPost new request of http.MethodPost

func NewRequestPut added in v0.1.0

func NewRequestPut(url string) (*request.Request, error)

NewRequestPut new request of http.MethodPut

func NewRequestTrace added in v0.1.0

func NewRequestTrace(url string) (*request.Request, error)

NewRequestTrace new request of http.MethodTrace

Types

type CheckRedirectHandler

type CheckRedirectHandler func(req *http.Request, via []*http.Request) error

type Client

type Client struct {
	// contains filtered or unexported fields
}

func New

func New(options ...Option) *Client

func (*Client) Close

func (r *Client) Close()

func (*Client) Do

func (r *Client) Do(method, url string) (*response.Response, error)

func (*Client) DoRequest

func (r *Client) DoRequest(req *request.Request) (resp *response.Response, err error)

func (*Client) Option

func (r *Client) Option(option Option) *Client

func (*Client) Options

func (r *Client) Options(options ...Option) *Client

type Option

type Option func(req *Client)

func OptCheckRedirectHandler

func OptCheckRedirectHandler(clientCheckRedirect CheckRedirectHandler) Option

func OptContext

func OptContext(ctx context.Context) Option

func OptCookieJar

func OptCookieJar(jar http.CookieJar) Option

func OptDisableBr

func OptDisableBr() Option

func OptDisableGzip

func OptDisableGzip() Option

func OptEnableBr

func OptEnableBr() Option

func OptEnableGzip

func OptEnableGzip() Option

func OptHeader

func OptHeader(key string, value ...string) Option

func OptHeaders

func OptHeaders(headers map[string][]string) Option

func OptRetry

func OptRetry(num int) Option

OptRetry set retry num of requests in one client

func OptTimeout

func OptTimeout(timeout time.Duration) Option

func OptTransport

func OptTransport(roundTripper http.RoundTripper) Option

func OptUserAgent

func OptUserAgent(ua string) Option

type ReturnHttpClient

type ReturnHttpClient func(client *http.Client)

type Sign

type Sign int8
const (
	SignGzip Sign = 1 << 0
	SignBr   Sign = 1 << 1
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL