requests

package module
v0.2.3 Latest Latest
Warning

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

Go to latest
Published: Mar 22, 2024 License: Apache-2.0 Imports: 34 Imported by: 13

README

Test Status Go Report Card Go.Dev reference Sourcegraph Release

基本介绍

GoRequests框架提供了强大便捷易用的HTTP客户端,基于http.Client进行扩展开发,对象创建可以通过requests.New()包方法,也可以通过new(requests.Client).Clone()方法调用,同时你还可以使用requests.NewHttpClient(requests.DefaultHttpClient(nil))创建对象。推荐使用requests.New()来便捷地创建HTTP客户端对象。

安装

$ go get github.com/pkg6/go-requests

基础使用

package main

import (
	"context"
	"fmt"
	"github.com/pkg6/go-requests"
	"net/url"
)

func main() {
	data := url.Values{}
	data.Set("k", "v")
	get, _ := requests.New().Get(context.Background(), "http://www.httpbin.org/get", data)
	defer get.Close()
	fmt.Println(get.ReadAllString())
	post, _ := requests.New().AsJson().Post(context.Background(), "http://www.httpbin.org/post", data)
	defer post.Close()
	fmt.Println(post.ReadAllString())
}

文件上传

u := url.Values{}
u.Set("服务端接受的name名称", "@file:loaclfile.txt")
request := requests.New()
request.PostForm(context.Background(), "http://127.0.0.1/upload", u)

stream请求与返回处理

ChatGPT【以微软为例】

package main

import (
	"fmt"
	"github.com/pkg6/go-requests"
)

func main() {
	payload := `{
  "messages": [
    {
      "role": "system",
      "content": "You are an AI assistant that helps people find information."
    },
    {
      "role": "user",
      "content": "你是谁"
    }
  ],
  "model":"gpt-35-turbo",
  "temperature": 0.7,
  "top_p": 0.95,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "max_tokens": 800,
  "stop": null,
  "stream":true 
}`

	json, _ := requests.PostJson("end-point url", payload, func(client *requests.Client) {
		client.WithHeader("api-key", "api-key")
	})
	defer json.Close()
	json.ReadStream(func(line []byte, number int64) {
		fmt.Println(string(line))
	})
}

方法列表

https://pkg.go.dev/github.com/pkg6/go-requests

返回对象

(r *Response) Close() error
(r *Response) TraceInfo() TraceInfo
(r *Response) GetCookie() Cookie
(r *Response) ReadAll() []byte
(r *Response) ReadStream(lineNumberFun func(line []byte, number int64)) int64
(r *Response) ReadAllString() string
(r *Response) ContentType() string
(r *Response) Unmarshal(d any) error
(r *Response) IsSuccess() bool
(r *Response) IsError() bool

加入我们

如果你认可我们的开源项目,有兴趣为 go-requests 的发展做贡献,竭诚欢迎加入我们一起开发完善。无论是报告错误或是 Pull Request 开发,那怕是修改一个错别字也是对我们莫大的帮助。

License

go-requests is licensed under the Apache License 2.0 License - see the LICENSE file for details

Documentation

Index

Constants

View Source
const (
	HttpSchemeName      = `http`
	HttpParamFileHolder = `@file:`
	HttpRegexParamJson  = `^[\w\[\]]+=.+`

	HttpHeaderHost   = `Host`
	HttpHeaderCookie = `Cookie`

	HttpHeaderUserAgent     = `User-Agent`
	HttpHeaderAcceptRanges  = `Accept-Ranges`
	HttpHeaderAuthorization = "Authorization"
	HttpHeaderAccept        = "Accept"
	HttpMIMEEventStream     = "text/event-stream"
	HttpHeaderCacheControl  = "Cache-Control"
	HttpHeaderConnection    = "Connection"
	HttpHeaderContentType   = `Content-Type`
	HttpHeaderContentLength = `Content-Length`

	CharsetUTF8                          = "charset=UTF-8"
	HttpHeaderContentTypeJson            = `application/json`
	HttpHeaderContentTypeJsonCharsetUTF8 = HttpHeaderContentTypeJson + "; " + CharsetUTF8
	HttpHeaderContentTypeXml             = `application/xml`
	HttpHeaderContentTypeXmlCharsetUTF8  = HttpHeaderContentTypeXml + "; " + CharsetUTF8
	HttpHeaderContentTypeForm            = `application/x-www-form-urlencoded`

	AuthorizationTypeBearer = "Bearer "
	AuthorizationTypeBasic  = "Basic "
)

Variables

View Source
var (
	ErrDownloaderFileIncomplete = errors.New("incomplete file")
	ErrDownloaderPartLength     = errors.New("the length of the segmented download is incorrect")
)
View Source
var (
	ErrAutoRedirectDisabled = errors.New("auto redirect is disabled")
)

Functions

func AnyString added in v0.0.15

func AnyString(any any) string

AnyString converts `any` to string. It's most commonly used converting function.

func Base64Decode added in v0.0.2

func Base64Decode(str string) (string, error)

func Base64Encode added in v0.0.2

func Base64Encode(str string) string

func Base64File added in v0.0.2

func Base64File(path string) (string, error)

func Base64Reader added in v0.0.2

func Base64Reader(reader io.Reader) (string, error)

func Base64StdEncoding added in v0.0.4

func Base64StdEncoding(base64Str string) io.Reader

func ConnectUnmarshal added in v0.0.6

func ConnectUnmarshal(uri string, data, d any, args ...ArgsFunc) error

func DefaultHttpClient added in v0.0.7

func DefaultHttpClient(localAddr net.Addr) *http.Client

DefaultHttpClient set InsecureSkipVerify = false c.Client.Transport.(*http.Transport).TLSClientConfig.InsecureSkipVerify = false

func DeleteUnmarshal added in v0.0.6

func DeleteUnmarshal(uri string, data, d any, args ...ArgsFunc) error

func Download added in v0.2.2

func Download(uri, fileName string) error

func GetUnmarshal added in v0.0.6

func GetUnmarshal(uri string, data, d any, args ...ArgsFunc) error

func HeadUnmarshal added in v0.0.6

func HeadUnmarshal(uri string, data, d any, args ...ArgsFunc) error

func HttpBuildQuery

func HttpBuildQuery(data map[string]any) string

HttpBuildQuery Generate get request parameters

func IsJSONType

func IsJSONType(s string) bool

IsJSONType method is to check JSON content type or not

func IsMatchString

func IsMatchString(expr string, s string) bool

func IsStreamType added in v0.0.9

func IsStreamType(s string) bool

func IsXMLType

func IsXMLType(s string) bool

IsXMLType method is to check XML content type or not

func Md5 added in v0.0.2

func Md5(str string) string

func Md5File added in v0.0.2

func Md5File(path string) (string, error)

func Md5Reader added in v0.0.2

func Md5Reader(reader io.Reader) (string, error)

Md5Reader f, _ := os.Open("./_example/1.jpeg") f.Seek(0, 0) requests.Md5Reader(f)

func NewReadCloser

func NewReadCloser(content []byte, repeatable bool) io.ReadCloser

NewReadCloser creates and returns a RepeatReadCloser object.

func OptionsUnmarshal added in v0.0.6

func OptionsUnmarshal(uri string, data, d any, args ...ArgsFunc) error

func PatchUnmarshal added in v0.0.6

func PatchUnmarshal(uri string, data, d any, args ...ArgsFunc) error

func PostFormUnmarshal added in v0.0.6

func PostFormUnmarshal(uri string, data url.Values, d any, args ...ArgsFunc) error

func PostFormWithFilesUnmarshal deprecated added in v0.0.6

func PostFormWithFilesUnmarshal(uri string, data url.Values, d any, args ...ArgsFunc) error

Deprecated: use PostFormUnmarshal instead. To be removed in v0.3.0 release.

func PostJsonUnmarshal added in v0.0.6

func PostJsonUnmarshal(uri string, data, d any, args ...ArgsFunc) error

func PostUnmarshal added in v0.0.6

func PostUnmarshal(uri string, data, d any, args ...ArgsFunc) error

func PutUnmarshal added in v0.0.6

func PutUnmarshal(uri string, data, d any, args ...ArgsFunc) error

func RandomMobileUserAgent added in v0.0.14

func RandomMobileUserAgent() string

RandomMobileUserAgent generates a random MOBILE browser user-agent on every requests

func RandomUserAgent added in v0.0.14

func RandomUserAgent() string

RandomUserAgent generates a random DESKTOP browser user-agent on every requests

func RequestRoute added in v0.0.6

func RequestRoute(route IRoute) error

RequestRoute

route := &requests.Route{
		Uri:    "https://api.github.com/users/github",
		Method: http.MethodGet,
		D:      &.tests.GitHubUser{},
	}
	_ = requests.RequestRoute(route)
	fmt.Println(route.GetD().(*.tests.GitHubUser))

func RequestUnmarshal added in v0.0.6

func RequestUnmarshal(method, uri string, data, d any, args ...ArgsFunc) error

func Sha1 added in v0.0.2

func Sha1(str string) string

func Sha256 added in v0.0.2

func Sha256(str string) string

func TraceUnmarshal added in v0.0.6

func TraceUnmarshal(uri string, data, d any, args ...ArgsFunc) error

func URIQuery added in v0.0.13

func URIQuery(uri string, query ...url.Values) *url.URL

func URLDecode added in v0.0.2

func URLDecode(str string) (string, error)

func URLEncode added in v0.0.2

func URLEncode(str string) string

func UrlValues added in v0.0.6

func UrlValues(uvs ...url.Values) url.Values

Types

type ArgsFunc added in v0.0.3

type ArgsFunc func(client *Client)

func Debug added in v0.0.3

func Debug() ArgsFunc

func SetTLSConfig added in v0.0.3

func SetTLSConfig(tlsConfig *tls.Config) ArgsFunc

func WithBasicAuth added in v0.0.3

func WithBasicAuth(username, password string) ArgsFunc

func WithContentType added in v0.0.3

func WithContentType(contentType string) ArgsFunc

func WithCookie added in v0.0.3

func WithCookie(k, v string) ArgsFunc

func WithCookies added in v0.0.3

func WithCookies(cookies map[string]string) ArgsFunc

func WithHeader added in v0.0.3

func WithHeader(header, value string) ArgsFunc

func WithHeaders added in v0.0.3

func WithHeaders(headers map[string]string) ArgsFunc

func WithProxyUrl added in v0.0.3

func WithProxyUrl(proxyURL string) ArgsFunc

func WithTLSKeyCrt added in v0.0.3

func WithTLSKeyCrt(crtFile, keyFile string) ArgsFunc

func WithToken added in v0.0.3

func WithToken(token string, Type ...string) ArgsFunc

func WithUserAgent added in v0.0.3

func WithUserAgent(userAgent string) ArgsFunc

type CacheInterface added in v0.0.18

type CacheInterface interface {
	Set(key, value string, ttl time.Duration) error
	Get(key string) (string, error)
	Has(key string) bool
	Delete(key string) error
	CleanExpired() error
}

func NewFileCache added in v0.0.8

func NewFileCache(paths ...string) CacheInterface

NewFileCache

go func() {
	ticker := time.NewTicker(time.Minute * 5)
	for range ticker.C {
		cache.CleanExpired()
	}
}()

type Client

type Client struct {
	*http.Client
	Debug bool

	BaseUrl       string
	Query         url.Values
	QueryKVs      []KVCallback
	Header        http.Header
	HeaderKVs     []KVCallback
	Cookie        Cookie
	Logger        LoggerInterface
	JSONMarshal   func(v any) ([]byte, error)
	JSONUnmarshal func(data []byte, v any) error
	XMLMarshal    func(v any) ([]byte, error)
	XMLUnmarshal  func(data []byte, v any) error
	// contains filtered or unexported fields
}

func New

func New() *Client

func NewClient added in v0.0.17

func NewClient() *Client

func NewWithHttpClient added in v0.0.17

func NewWithHttpClient(client *http.Client) *Client

func (*Client) AsForm

func (c *Client) AsForm() *Client

AsForm is a chaining function, which sets the HTTP content type as "application/x-www-form-urlencoded" for the next request.

func (*Client) AsJson

func (c *Client) AsJson() *Client

AsJson is a chaining function, which sets the HTTP content type as "application/json" for the next request.

Note that it also checks and encodes the parameter to JSON format automatically.

func (*Client) AsXml

func (c *Client) AsXml() *Client

AsXml is a chaining function, which sets the HTTP content type as "application/xml" for the next request.

Note that it also checks and encodes the parameter to XML format automatically.

func (*Client) BrowserMode

func (c *Client) BrowserMode() *Client

BrowserMode enables browser mode of the client. When browser mode is enabled, it automatically saves and sends cookie content from and to server.

func (*Client) Clone

func (c *Client) Clone() *Client

Clone Parameter initialization

func (*Client) Connect

func (c *Client) Connect(ctx context.Context, uri string, data any) (*Response, error)

Connect send CONNECT request and returns the response object. Note that the response object MUST be closed if it'll never be used.

func (*Client) ConnectBytes added in v0.0.7

func (c *Client) ConnectBytes(ctx context.Context, uri string, data any) ([]byte, error)

func (*Client) ConnectD added in v0.0.7

func (c *Client) ConnectD(ctx context.Context, uri string, data, d any) (response *Response, err error)

func (*Client) ConnectUnmarshal added in v0.0.16

func (c *Client) ConnectUnmarshal(ctx context.Context, uri string, data, d any) error

func (*Client) Delete

func (c *Client) Delete(ctx context.Context, uri string, data any) (*Response, error)

Delete send DELETE request and returns the response object. Note that the response object MUST be closed if it'll never be used.

func (*Client) DeleteBytes added in v0.0.7

func (c *Client) DeleteBytes(ctx context.Context, uri string, data any) ([]byte, error)

func (*Client) DeleteD added in v0.0.7

func (c *Client) DeleteD(ctx context.Context, uri string, data, d any) (response *Response, err error)

func (*Client) DeleteUnmarshal added in v0.0.16

func (c *Client) DeleteUnmarshal(ctx context.Context, uri string, data, d any) error

func (*Client) DoRequest

func (c *Client) DoRequest(ctx context.Context, method, uri string, body any) (response *Response, err error)

func (*Client) DoRequestBytes added in v0.0.7

func (c *Client) DoRequestBytes(ctx context.Context, method string, uri string, data any) ([]byte, error)

func (*Client) DoRequestD added in v0.0.7

func (c *Client) DoRequestD(ctx context.Context, method string, uri string, data, d any) (response *Response, err error)

func (*Client) DoRequestUnmarshal added in v0.0.16

func (c *Client) DoRequestUnmarshal(ctx context.Context, method string, uri string, data, d any) error

func (*Client) Download added in v0.2.2

func (c *Client) Download(ctx context.Context, uri, fileName string) error

func (*Client) EnableDebug added in v0.0.18

func (c *Client) EnableDebug() *Client

func (*Client) EnableTrace

func (c *Client) EnableTrace() *Client

func (*Client) Get

func (c *Client) Get(ctx context.Context, uri string, data any) (*Response, error)

Get send GET request and returns the response object. Note that the response object MUST be closed if it'll never be used.

func (*Client) GetBytes added in v0.0.7

func (c *Client) GetBytes(ctx context.Context, uri string, data any) ([]byte, error)

func (*Client) GetD added in v0.0.7

func (c *Client) GetD(ctx context.Context, uri string, data, d any) (response *Response, err error)

func (*Client) GetUnmarshal added in v0.0.16

func (c *Client) GetUnmarshal(ctx context.Context, uri string, data, d any) error

func (*Client) Head

func (c *Client) Head(ctx context.Context, uri string, data any) (*Response, error)

Head send HEAD request and returns the response object. Note that the response object MUST be closed if it'll never be used.

func (*Client) HeadBytes added in v0.0.7

func (c *Client) HeadBytes(ctx context.Context, uri string, data any) ([]byte, error)

func (*Client) HeadD added in v0.0.7

func (c *Client) HeadD(ctx context.Context, uri string, data, d any) (response *Response, err error)

func (*Client) HeadUnmarshal added in v0.0.16

func (c *Client) HeadUnmarshal(ctx context.Context, uri string, data, d any) error

func (*Client) Next

func (c *Client) Next(req *http.Request) (*Response, error)

Next calls the next middleware. This should only be call in HandlerFunc.

func (*Client) OnAfterRequest

func (c *Client) OnAfterRequest(callback RequestCallback) *Client

OnAfterRequest method appends request callback into the before request chain.

client.OnAfterRequest(func(client *requests.Client, request *http.Request) error{
		// Now you have access to Client and Request instance
		// manipulate it as per your need

		return nil 	// if its success otherwise return error
	})

func (*Client) OnBeforeRequest

func (c *Client) OnBeforeRequest(callback ClientCallback) *Client

OnBeforeRequest method appends request callback into the before request chain.

client.OnBeforeRequest(func(c *requests.Client) error {
		// Now you have access to Client and Request instance
		// manipulate it as per your need
		return nil 	// if its success otherwise return error
	})

func (*Client) OnError

func (c *Client) OnError(h ErrorHook) *Client

OnError method adds a callback that will be run whenever a request execution fails. This is called after all retries have been attempted (if any). If there was a response from the server, the error will be wrapped in *ResponseError which has the last response received from the server.

client.OnError(func(*http.Request, error){
	if v, ok := err.(*requests.ResponseError); ok {
		// Do something with v.Response
	}
	// Log the error, increment a metric, etc...
})

Out of the OnSuccess, OnError, OnInvalid, OnPanic callbacks, exactly one set will be invoked for each call to Request.Execute() that comletes.

func (*Client) OnPanic

func (c *Client) OnPanic(h ErrorHook) *Client

OnPanic method adds a callback that will be run whever a request execution panics.

Out of the OnSuccess, OnError, OnInvalid, OnPanic callbacks, exactly one set will be invoked for each call to Request.Execute() that completes. If an OnSuccess, OnError, or OnInvalid callback panics, then the exactly one rule can be violated.

func (*Client) OnResponse

func (c *Client) OnResponse(callback ResponseCallback) *Client

OnResponse method appends response callback into the after response chain.

client.OnResponse(func(request *http.Request, response *requests.Response) error {
		// Now you have access to Client and Response instance
		// manipulate it as per your need

		return nil 	// if its success otherwise return error
	})

func (*Client) OnSuccess

func (c *Client) OnSuccess(h SuccessHook) *Client

OnSuccess method adds a callback that will be run whenever a request execution succeeds. This is called after all retries have been attempted (if any).

Out of the OnSuccess, OnError, OnInvalid, OnPanic callbacks, exactly one set will be invoked for each call to Request.Execute() that comletes.

func (*Client) Options

func (c *Client) Options(ctx context.Context, uri string, data any) (*Response, error)

Options send OPTIONS request and returns the response object. Note that the response object MUST be closed if it'll never be used.

func (*Client) OptionsBytes added in v0.0.7

func (c *Client) OptionsBytes(ctx context.Context, uri string, data any) ([]byte, error)

func (*Client) OptionsD added in v0.0.7

func (c *Client) OptionsD(ctx context.Context, uri string, data, d any) (response *Response, err error)

func (*Client) OptionsUnmarshal added in v0.0.16

func (c *Client) OptionsUnmarshal(ctx context.Context, uri string, data, d any) error

func (*Client) Patch

func (c *Client) Patch(ctx context.Context, uri string, data any) (*Response, error)

Patch send PATCH request and returns the response object. Note that the response object MUST be closed if it'll never be used.

func (*Client) PatchBytes added in v0.0.7

func (c *Client) PatchBytes(ctx context.Context, uri string, data any) ([]byte, error)

func (*Client) PatchD added in v0.0.7

func (c *Client) PatchD(ctx context.Context, uri string, data, d any) (response *Response, err error)

func (*Client) PatchUnmarshal added in v0.0.16

func (c *Client) PatchUnmarshal(ctx context.Context, uri string, data, d any) error

func (*Client) Post

func (c *Client) Post(ctx context.Context, uri string, data any) (*Response, error)

Post sends request using HTTP method POST and returns the response object. Note that the response object MUST be closed if it'll never be used.

func (*Client) PostBytes added in v0.0.7

func (c *Client) PostBytes(ctx context.Context, uri string, data any) ([]byte, error)

func (*Client) PostD added in v0.0.7

func (c *Client) PostD(ctx context.Context, uri string, data, d any) (response *Response, err error)

func (*Client) PostForm

func (c *Client) PostForm(ctx context.Context, uri string, data url.Values) (*Response, error)

PostForm is different from net/http.PostForm. It's a wrapper of Post method, which sets the Content-Type as "multipart/form-data;". and It will automatically set boundary characters for the request body and Content-Type.

It's Seem like the following case:

Content-Type: multipart/form-data; boundary=----Boundarye4Ghaog6giyQ9ncN

And form data is like: ------Boundarye4Ghaog6giyQ9ncN Content-Disposition: form-data; name="checkType"

none

It's used for sending form data. Note that the response object MUST be closed if it'll never be used.

func (*Client) PostFormBytes added in v0.0.7

func (c *Client) PostFormBytes(ctx context.Context, uri string, data url.Values) ([]byte, error)

func (*Client) PostFormD added in v0.0.7

func (c *Client) PostFormD(ctx context.Context, uri string, data url.Values, d any) (response *Response, err error)

func (*Client) PostFormUnmarshal added in v0.0.16

func (c *Client) PostFormUnmarshal(ctx context.Context, uri string, data url.Values, d any) error

func (*Client) PostFormWithFiles deprecated added in v0.0.4

func (c *Client) PostFormWithFiles(ctx context.Context, uri string, data url.Values) (*Response, error)

Deprecated: use PostForm instead. To be removed in v0.3.0 release.

func (*Client) PostFormWithFilesBytes deprecated added in v0.0.7

func (c *Client) PostFormWithFilesBytes(ctx context.Context, uri string, data url.Values) ([]byte, error)

Deprecated: use PostFormBytes instead. To be removed in v0.3.0 release.

func (*Client) PostFormWithFilesD deprecated added in v0.0.7

func (c *Client) PostFormWithFilesD(ctx context.Context, uri string, data url.Values, d any) (response *Response, err error)

Deprecated: use PostFormD instead. To be removed in v0.3.0 release.

func (*Client) PostFormWithFilesUnmarshal deprecated added in v0.0.16

func (c *Client) PostFormWithFilesUnmarshal(ctx context.Context, uri string, data url.Values, d any) error

Deprecated: use PostFormUnmarshal instead. To be removed in v0.3.0 release.

func (*Client) PostJson

func (c *Client) PostJson(ctx context.Context, uri string, data any) (*Response, error)

func (*Client) PostJsonBytes added in v0.0.7

func (c *Client) PostJsonBytes(ctx context.Context, uri string, data any) ([]byte, error)

func (*Client) PostJsonD added in v0.0.7

func (c *Client) PostJsonD(ctx context.Context, uri string, data, d any) (response *Response, err error)

func (*Client) PostJsonUnmarshal added in v0.0.16

func (c *Client) PostJsonUnmarshal(ctx context.Context, uri string, data, d any) error

func (*Client) PostUnmarshal added in v0.0.16

func (c *Client) PostUnmarshal(ctx context.Context, uri string, data, d any) error

func (*Client) Put

func (c *Client) Put(ctx context.Context, uri string, data any) (*Response, error)

Put send PUT request and returns the response object. Note that the response object MUST be closed if it'll never be used.

func (*Client) PutBytes added in v0.0.7

func (c *Client) PutBytes(ctx context.Context, uri string, data any) ([]byte, error)

func (*Client) PutD added in v0.0.7

func (c *Client) PutD(ctx context.Context, uri string, data, d any) (response *Response, err error)

func (*Client) PutUnmarshal added in v0.0.16

func (c *Client) PutUnmarshal(ctx context.Context, uri string, data, d any) error

func (*Client) SetBaseURL added in v0.0.7

func (c *Client) SetBaseURL(baseUrl string) *Client

func (*Client) SetCheckRedirect added in v0.0.17

func (c *Client) SetCheckRedirect(fn func(req *http.Request, via []*http.Request) error)

func (*Client) SetCookie added in v0.0.17

func (c *Client) SetCookie(cookie Cookie) *Client

func (*Client) SetDebug added in v0.0.7

func (c *Client) SetDebug(debug bool) *Client

func (*Client) SetHeader added in v0.0.17

func (c *Client) SetHeader(header http.Header) *Client

func (*Client) SetHttpClient added in v0.0.17

func (c *Client) SetHttpClient(client *http.Client) *Client

func (*Client) SetJSONMarshaler

func (c *Client) SetJSONMarshaler(marshaler func(v interface{}) ([]byte, error)) *Client

SetJSONMarshaler method sets the JSON marshaler function to marshal the request body. By default, uses `encoding/json` package to marshal the request body.

func (*Client) SetJSONUnmarshaler

func (c *Client) SetJSONUnmarshaler(unmarshaler func(data []byte, v interface{}) error) *Client

SetJSONUnmarshaler method sets the JSON unmarshaler function to unmarshal the response body.

func (*Client) SetLogger added in v0.0.18

func (c *Client) SetLogger(logger LoggerInterface) *Client

func (*Client) SetQuery added in v0.0.7

func (c *Client) SetQuery(query url.Values) *Client

func (*Client) SetRetry

func (c *Client) SetRetry(retryCount int, retryWaitTime time.Duration) *Client

SetRetry is a chaining function, which sets retry count and interval when failure for next request.

func (*Client) SetTLSConfig

func (c *Client) SetTLSConfig(tlsConfig *tls.Config) *Client

SetTLSConfig sets the TLS configuration of client.

func (*Client) SetTimeout added in v0.0.17

func (c *Client) SetTimeout(t time.Duration) *Client

SetTimeout sets the request timeout for the client.

func (*Client) SetWriter added in v0.0.14

func (c *Client) SetWriter(writer io.Writer) *Client

func (*Client) SetXMLMarshaler

func (c *Client) SetXMLMarshaler(marshaler func(v any) ([]byte, error)) *Client

SetXMLMarshaler method sets the XML marshaler function to marshal the request body.

func (*Client) SetXMLUnmarshaler

func (c *Client) SetXMLUnmarshaler(unmarshaler func(data []byte, v any) error) *Client

SetXMLUnmarshaler method sets the XML unmarshaler function to unmarshal the response body. By default, uses `encoding/xml` package to unmarshal the response body.

func (*Client) Trace

func (c *Client) Trace(ctx context.Context, uri string, data any) (*Response, error)

Trace send TRACE request and returns the response object. Note that the response object MUST be closed if it'll never be used.

func (*Client) TraceBytes added in v0.0.7

func (c *Client) TraceBytes(ctx context.Context, uri string, data any) ([]byte, error)

func (*Client) TraceD added in v0.0.7

func (c *Client) TraceD(ctx context.Context, uri string, data, d any) (response *Response, err error)

func (*Client) TraceUnmarshal added in v0.0.16

func (c *Client) TraceUnmarshal(ctx context.Context, uri string, data, d any) error

func (*Client) Unmarshal

func (c *Client) Unmarshal(contentType string, b []byte, d any) (err error)

Unmarshal content into object from JSON or XML

func (*Client) Use

func (c *Client) Use(middlewares ...MiddlewareFunc) *Client

Use adds one or more middleware handlers to client.

func (*Client) WithBasicAuth

func (c *Client) WithBasicAuth(username, password string) *Client

WithBasicAuth Specify the basic authentication username and password for the request.

func (*Client) WithClientJar added in v0.0.18

func (c *Client) WithClientJar(jar http.CookieJar) *Client

WithClientJar exp: jar, _ := cookiejar.New(nil) WithClientCookieJar(jar)

func (*Client) WithContentType

func (c *Client) WithContentType(contentType string) *Client

WithContentType is a chaining function, which sets HTTP content type for the next request.

func (*Client) WithCookie

func (c *Client) WithCookie(k, v string) *Client

func (*Client) WithCookieMap added in v0.0.15

func (c *Client) WithCookieMap(cookies map[string]string) *Client

func (*Client) WithCookieNextRequest added in v0.0.14

func (c *Client) WithCookieNextRequest(cache CacheInterface, ttl time.Duration) *Client

WithCookieNextRequest

 The first access to the root domain name will cache cookie data, and the second access will carry the cookie data from the cache until the cache expires and is regenerated
	cache := requests.NewFileCache("you path/cache")
	WithCookieNextRequest(cache, time.Hour)

func (*Client) WithCookieString

func (c *Client) WithCookieString(cookieString string) *Client

func (*Client) WithHeader

func (c *Client) WithHeader(k, v string) *Client

WithHeader method sets a single header field and its value in the client instance. These headers will be applied to all requests raised from this client instance. Also it can be overridden at request level header options.

WithHeader("Content-Type", "application/json").
WithHeader("Accept", "application/json")

func (*Client) WithHeaderKV added in v0.2.1

func (c *Client) WithHeaderKV(callback KVCallback) *Client

func (*Client) WithHeaderMap added in v0.0.17

func (c *Client) WithHeaderMap(headers map[string]string) *Client

WithHeaderMap method sets multiple headers field and its values at one go in the client instance. These headers will be applied to all requests raised from this client instance. Also it can be overridden at request level headers options. For Example: To set `Content-Type` and `Accept` as `application/json`

WithHeaders(map[string]string{
	"Content-Type": "application/json",
	"Accept": "application/json",
})

func (*Client) WithHeaderVerbatim

func (c *Client) WithHeaderVerbatim(k, v string) *Client

WithHeaderVerbatim method is to set a single header field and its value verbatim in the current request.

For Example: To set `all_lowercase` and `UPPERCASE` as `available`.

WithHeaderVerbatim("all_lowercase", "available").
WithHeaderVerbatim("UPPERCASE", "available")

Also you can override header value, which was set at client instance level.

func (*Client) WithProxyUrl

func (c *Client) WithProxyUrl(proxyURL string) *Client

WithProxyUrl set proxy for the client. This func will do nothing when the parameter `proxyURL` is empty or in wrong pattern. The correct pattern is like `http://USER:PASSWORD@IP:PORT` or `socks5://USER:PASSWORD@IP:PORT`. Only `http` and `socks5` proxies are supported currently.

func (*Client) WithQueryKV added in v0.2.1

func (c *Client) WithQueryKV(callback KVCallback) *Client

func (*Client) WithRandomMobileUserAgent added in v0.0.14

func (c *Client) WithRandomMobileUserAgent() *Client

func (*Client) WithRandomUserAgent added in v0.0.14

func (c *Client) WithRandomUserAgent() *Client

func (*Client) WithRedirectLimit

func (c *Client) WithRedirectLimit(redirectLimit int) *Client

WithRedirectLimit limits the number of jumps.

func (*Client) WithRedirectPolicy

func (c *Client) WithRedirectPolicy(policies ...any) *Client

WithRedirectPolicy method sets the client redirect poilicy. provides ready to use redirect policies. Wanna create one for yourself refer to `redirect.go`.

WithRedirectLimit(20)
WithRedirectPolicy(FlexibleRedirectPolicy(20))
WithRedirectPolicy(FlexibleRedirectPolicy(20), DomainCheckRedirectPolicy("host1.com", "host2.net"))

func (*Client) WithTLSKeyCrt

func (c *Client) WithTLSKeyCrt(crtFile, keyFile string) *Client

WithTLSKeyCrt sets the certificate and key file for TLS configuration of client.

func (*Client) WithToken

func (c *Client) WithToken(token string, authorizationType ...string) *Client

WithToken Specify an authorization token for the request.

func (*Client) WithUserAgent

func (c *Client) WithUserAgent(userAgent string) *Client

type ClientCallback added in v0.0.14

type ClientCallback func(client *Client) error
type Cookie map[string][]string

func CookieStringEscape added in v0.0.15

func CookieStringEscape(cookie string) Cookie

func (Cookie) Add added in v0.0.13

func (v Cookie) Add(key, value string)

func (Cookie) Del added in v0.0.13

func (v Cookie) Del(key string)

func (Cookie) Encode added in v0.0.13

func (v Cookie) Encode() string

func (Cookie) Get added in v0.0.13

func (v Cookie) Get(key string) string

func (Cookie) Has added in v0.0.13

func (v Cookie) Has(key string) bool

func (Cookie) Set added in v0.0.13

func (v Cookie) Set(key, value string)

type CtxKeyString added in v0.0.18

type CtxKeyString string

type Downloader added in v0.2.2

type Downloader struct {

	// 下载源链接
	URL string
	// 下载完成文件名
	FileName string
	//协程数量
	CoroutineNumber int
	// contains filtered or unexported fields
}

func NewDownloader added in v0.2.2

func NewDownloader(req *Client, ctx context.Context, url, fileName string, coroutineNumbers ...int) *Downloader

func (*Downloader) Download added in v0.2.2

func (d *Downloader) Download() error

type ErrorHook

type ErrorHook func(client *Client, request *http.Request, err error)

type FileCache added in v0.0.8

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

func (*FileCache) CleanExpired added in v0.0.8

func (f *FileCache) CleanExpired() error

func (*FileCache) Delete added in v0.0.8

func (f *FileCache) Delete(key string) error

func (*FileCache) Get added in v0.0.8

func (f *FileCache) Get(key string) (string, error)

func (*FileCache) Has added in v0.0.8

func (f *FileCache) Has(key string) bool

func (*FileCache) Set added in v0.0.8

func (f *FileCache) Set(key, value string, ttl time.Duration) error

type IRoute added in v0.0.6

type IRoute interface {
	GetMethod() string
	GetUri() string
	GetHeader() map[string]string
	GetTlsConfig() *tls.Config
	GetCookies() map[string]string
	GetBody() any
	GetD() any
}

type KVCallback added in v0.2.1

type KVCallback func() (k, v string)

type Logger added in v0.0.14

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

func DefaultLogger added in v0.0.14

func DefaultLogger() *Logger

func NewLogger added in v0.2.2

func NewLogger(l *log.Logger, logo string) *Logger

func (*Logger) Debugf added in v0.0.14

func (l *Logger) Debugf(format string, v ...any)

func (*Logger) Errorf added in v0.0.14

func (l *Logger) Errorf(format string, v ...any)

func (*Logger) Warnf added in v0.0.14

func (l *Logger) Warnf(format string, v ...any)

type LoggerInterface added in v0.0.18

type LoggerInterface interface {
	Errorf(format string, v ...any)
	Warnf(format string, v ...any)
	Debugf(format string, v ...any)
}

type MiddlewareFunc

type MiddlewareFunc = func(c *Client, r *http.Request) (*Response, error)

MiddlewareFunc middleware handler func

type ReadCloser

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

ReadCloser implements the io.ReadCloser interface which is used for reading request body content multiple times.

Note that it cannot be closed.

func (*ReadCloser) Close

func (b *ReadCloser) Close() error

Close implements the io.ReadCloser interface.

func (*ReadCloser) Read

func (b *ReadCloser) Read(p []byte) (n int, err error)

Read implements the io.ReadCloser interface.

type RedirectPolicy

type RedirectPolicy interface {
	Apply(req *http.Request, via []*http.Request) error
}

RedirectPolicy to regulate the redirects in the client. Objects implementing the RedirectPolicy interface can be registered as

Apply function should return nil to continue the redirect jounery, otherwise return error to stop the redirect.

func DomainCheckRedirectPolicy

func DomainCheckRedirectPolicy(hostnames ...string) RedirectPolicy

DomainCheckRedirectPolicy is convenient method to define domain name redirect rule in client. Redirect is allowed for only mentioned host in the policy.

requests.WithRedirectPolicy(DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))

func FlexibleRedirectPolicy

func FlexibleRedirectPolicy(noOfRedirect int) RedirectPolicy

FlexibleRedirectPolicy is convenient method to create No of redirect policy for HTTP client.

func NoRedirectPolicy

func NoRedirectPolicy() RedirectPolicy

NoRedirectPolicy is used to disable redirects in the HTTP client

requests.WithRedirectPolicy(NoRedirectPolicy())

type RedirectPolicyFunc

type RedirectPolicyFunc func(*http.Request, []*http.Request) error

The RedirectPolicyFunc type is an adapter to allow the use of ordinary functions as RedirectPolicy. If f is a function with the appropriate signature, RedirectPolicyFunc(f) is a RedirectPolicy object that calls f.

func (RedirectPolicyFunc) Apply

func (f RedirectPolicyFunc) Apply(req *http.Request, via []*http.Request) error

Apply calls f(req, via).

type RequestCallback added in v0.0.14

type RequestCallback func(client *Client, request *http.Request) error

type RequestError added in v0.0.20

type RequestError struct {
	URI        string
	Method     string
	StatusCode int
	Response   *Response
}

func (*RequestError) Error added in v0.0.20

func (r *RequestError) Error() string

type Response

type Response struct {
	*http.Response // Response is the underlying http.Response object of certain request.
	// contains filtered or unexported fields
}

func Connect

func Connect(uri string, data any, args ...ArgsFunc) (*Response, error)

func ConnectD added in v0.2.2

func ConnectD(uri string, data, d any, args ...ArgsFunc) (*Response, error)

func Delete

func Delete(uri string, data any, args ...ArgsFunc) (*Response, error)

func DeleteD added in v0.2.2

func DeleteD(uri string, data, d any, args ...ArgsFunc) (*Response, error)

func Get

func Get(uri string, data any, args ...ArgsFunc) (*Response, error)

func GetD added in v0.2.2

func GetD(uri string, data, d any, args ...ArgsFunc) (*Response, error)
func Head(uri string, data any, args ...ArgsFunc) (*Response, error)

func HeadD added in v0.2.2

func HeadD(uri string, data, d any, args ...ArgsFunc) (*Response, error)

func Options

func Options(uri string, data any, args ...ArgsFunc) (*Response, error)

func OptionsD added in v0.2.2

func OptionsD(uri string, data, d any, args ...ArgsFunc) (*Response, error)

func Patch

func Patch(uri string, data any, args ...ArgsFunc) (*Response, error)

func PatchD added in v0.2.2

func PatchD(uri string, data, d any, args ...ArgsFunc) (*Response, error)

func Post

func Post(uri string, data any, args ...ArgsFunc) (*Response, error)

func PostD added in v0.2.2

func PostD(uri string, data, d any, args ...ArgsFunc) (*Response, error)

func PostForm

func PostForm(uri string, data url.Values, args ...ArgsFunc) (*Response, error)

func PostFormD added in v0.2.2

func PostFormD(uri string, data url.Values, d any, args ...ArgsFunc) (*Response, error)

func PostFormWithFiles deprecated added in v0.0.4

func PostFormWithFiles(uri string, data url.Values, args ...ArgsFunc) (*Response, error)

Deprecated: use PostForm instead. To be removed in v0.3.0 release.

func PostJson

func PostJson(uri string, data any, args ...ArgsFunc) (*Response, error)

func PostJsonD added in v0.2.2

func PostJsonD(uri string, data, d any, args ...ArgsFunc) (*Response, error)

func Put

func Put(uri string, data any, args ...ArgsFunc) (*Response, error)

func PutD added in v0.2.2

func PutD(uri string, data, d any, args ...ArgsFunc) (*Response, error)

func Request

func Request(method, uri string, data any, args ...ArgsFunc) (*Response, error)

func RequestD added in v0.2.2

func RequestD(method, uri string, data, d any, args ...ArgsFunc) (*Response, error)

func Trace

func Trace(uri string, data any, args ...ArgsFunc) (*Response, error)

func TraceD added in v0.2.2

func TraceD(uri string, data, d any, args ...ArgsFunc) (*Response, error)

func (*Response) Close

func (r *Response) Close() error

Close closes the response when it will never be used.

func (*Response) ContentType

func (r *Response) ContentType() string

ContentType response header Content-Type

func (*Response) GetCookie

func (r *Response) GetCookie() Cookie

func (*Response) IsError

func (r *Response) IsError() bool

IsError method returns true if HTTP status `code >= 400` otherwise false.

func (*Response) IsSuccess

func (r *Response) IsSuccess() bool

IsSuccess method returns true if HTTP status `code >= 200 and <= 299` otherwise false.

func (*Response) ReadAll

func (r *Response) ReadAll() []byte

ReadAll retrieves and returns the response content as []byte.

func (*Response) ReadAllString

func (r *Response) ReadAllString() string

ReadAllString retrieves and returns the response content as string.

func (*Response) ReadStream added in v0.0.5

func (r *Response) ReadStream(lineNumberFun func(line []byte, number int64)) int64

ReadStream Microsoft ChatGPT Data Structure start data: {"id":"","object":"","created":0,"model":"","prompt_filter_results":[{"prompt_index":0,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"choices":[],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"},"content_filter_results":{}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"我"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"是"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"一个"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"AI"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"助"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"手"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":","},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"可以"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"帮"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"助"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"您"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"查"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"找"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"信息"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"。"},"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}}}],"usage":null} data: {"id":"chatcmpl-801dpnRDRT0u4Nx5tec615WTJOXJt","object":"chat.completion.chunk","created":1695017001,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":"stop","delta":{},"content_filter_results":{}}],"usage":null} data: [DONE] Microsoft ChatGPT Data Structure end

func (*Response) TraceInfo

func (r *Response) TraceInfo() TraceInfo

func (*Response) Unmarshal

func (r *Response) Unmarshal(d any) error

Unmarshal content into object from JSON or XML

type ResponseCallback added in v0.0.14

type ResponseCallback func(client *Client, request *http.Request, response *Response) error

type ResponseError

type ResponseError struct {
	Response *Response
	Err      error
}

func (*ResponseError) Error

func (e *ResponseError) Error() string

type Route added in v0.0.6

type Route struct {
	Method, Uri     string
	Header, Cookies map[string]string
	TlsConfig       *tls.Config
	Body, D         any
}

func (*Route) GetBody added in v0.0.6

func (r *Route) GetBody() any

func (*Route) GetCookies added in v0.0.6

func (r *Route) GetCookies() map[string]string

func (*Route) GetD added in v0.0.6

func (r *Route) GetD() any

func (*Route) GetHeader added in v0.0.6

func (r *Route) GetHeader() map[string]string

func (*Route) GetMethod added in v0.0.6

func (r *Route) GetMethod() string

func (*Route) GetTlsConfig added in v0.0.6

func (r *Route) GetTlsConfig() *tls.Config

func (*Route) GetUri added in v0.0.6

func (r *Route) GetUri() string

type SuccessHook

type SuccessHook func(client *Client, response *Response)

type TraceInfo

type TraceInfo struct {
	// DNSLookup is a duration that transport took to perform
	// DNS lookup.
	DNSLookup time.Duration
	// ConnTime is a duration that took to obtain a successful connection.
	ConnTime time.Duration
	// TCPConnTime is a duration that took to obtain the TCP connection.
	TCPConnTime time.Duration
	// TLSHandshake is a duration that TLS handshake took place.
	TLSHandshake time.Duration
	// ServerTime is a duration that server took to respond first byte.
	ServerTime time.Duration
	// ResponseTime is a duration since first response byte from server to
	// request completion.
	ResponseTime time.Duration
	// TotalTime is a duration that total request took end-to-end.
	TotalTime time.Duration
	// IsConnReused is whether this connection has been previously
	// used for another HTTP request.
	IsConnReused bool
	// IsConnWasIdle is whether this connection was obtained from an
	// idle pool.
	IsConnWasIdle bool
	// ConnIdleTime is a duration how long the connection was previously
	// idle, if IsConnWasIdle is true.
	ConnIdleTime time.Duration
	// RequestAttempt is to represent the request attempt made during a
	// request execution flow, including retry count.
	RequestAttempt int
	// RemoteAddr returns the remote network address.
	RemoteAddr net.Addr
}

Jump to

Keyboard shortcuts

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