req

package
v13.15.7 Latest Latest
Warning

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

Go to latest
Published: Jan 21, 2025 License: Apache-2.0 Imports: 16 Imported by: 15

Documentation

Overview

Package req simplify working with an HTTP requests

Index

Examples

Constants

View Source
const (
	ERROR_BODY_ENCODE    = 1
	ERROR_CREATE_REQUEST = 2
	ERROR_SEND_REQUEST   = 3
)

Error types

View Source
const (
	POST   = "POST"
	GET    = "GET"
	PUT    = "PUT"
	HEAD   = "HEAD"
	DELETE = "DELETE"
	PATCH  = "PATCH"
)

Request method

View Source
const (
	CONTENT_TYPE_ATOM         = "application/atom+xml"
	CONTENT_TYPE_EDI          = "application/EDI-X12"
	CONTENT_TYPE_EDIFACT      = "application/EDIFACT"
	CONTENT_TYPE_JSON         = "application/json"
	CONTENT_TYPE_JAVASCRIPT   = "application/javascript"
	CONTENT_TYPE_OCTET_STREAM = "application/octet-stream"
	CONTENT_TYPE_PDF          = "application/pdf"
	CONTENT_TYPE_POSTSCRIPT   = "application/postscript"
	CONTENT_TYPE_SOAP         = "application/soap+xml"
	CONTENT_TYPE_WOFF         = "application/font-woff"
	CONTENT_TYPE_XHTML        = "application/xhtml+xml"
	CONTENT_TYPE_DTD          = "application/xml-dtd"
	CONTENT_TYPE_XOP          = "application/xop+xml"
	CONTENT_TYPE_ZIP          = "application/zip"
	CONTENT_TYPE_GZIP         = "application/gzip"
	CONTENT_TYPE_BITTORRENT   = "application/x-bittorrent"
	CONTENT_TYPE_TEX          = "application/x-tex"
	CONTENT_TYPE_BASIC        = "audio/basic"
	CONTENT_TYPE_L24          = "audio/L24"
	CONTENT_TYPE_MP4_AUDIO    = "audio/mp4"
	CONTENT_TYPE_AAC          = "audio/aac"
	CONTENT_TYPE_MPEG_AUDIO   = "audio/mpeg"
	CONTENT_TYPE_OGG_AUDIO    = "audio/ogg"
	CONTENT_TYPE_VORBIS       = "audio/vorbis"
	CONTENT_TYPE_WMA          = "audio/x-ms-wma"
	CONTENT_TYPE_WAX          = "audio/x-ms-wax"
	CONTENT_TYPE_REALAUDIO    = "audio/vnd.rn-realaudio"
	CONTENT_TYPE_WAV          = "audio/vnd.wave"
	CONTENT_TYPE_WEBM_AUDIO   = "audio/webm"
	CONTENT_TYPE_GIF          = "image/gif"
	CONTENT_TYPE_JPEG         = "image/jpeg"
	CONTENT_TYPE_PJPEG        = "image/pjpeg"
	CONTENT_TYPE_PNG          = "image/png"
	CONTENT_TYPE_SVG          = "image/svg+xml"
	CONTENT_TYPE_TIFF         = "image/tiff"
	CONTENT_TYPE_ICON         = "image/vnd.microsoft.icon"
	CONTENT_TYPE_WBMP         = "image/vnd.wap.wbmp"
	CONTENT_TYPE_HTTP         = "message/http"
	CONTENT_TYPE_IMDN         = "message/imdn+xml"
	CONTENT_TYPE_PARTIAL      = "message/partial"
	CONTENT_TYPE_RFC822       = "message/rfc822"
	CONTENT_TYPE_EXAMPLE      = "model/example"
	CONTENT_TYPE_IGES         = "model/iges"
	CONTENT_TYPE_MESH         = "model/mesh"
	CONTENT_TYPE_VRML         = "model/vrml"
	CONTENT_TYPE_MIXED        = "multipart/mixed"
	CONTENT_TYPE_ALTERNATIVE  = "multipart/alternative"
	CONTENT_TYPE_RELATED      = "multipart/related"
	CONTENT_TYPE_FORM_DATA    = "multipart/form-data"
	CONTENT_TYPE_SIGNED       = "multipart/signed"
	CONTENT_TYPE_ENCRYPTED    = "multipart/encrypted"
	CONTENT_TYPE_CSS          = "text/css"
	CONTENT_TYPE_CSV          = "text/csv"
	CONTENT_TYPE_HTML         = "text/html"
	CONTENT_TYPE_PLAIN        = "text/plain"
	CONTENT_TYPE_PHP          = "text/php"
	CONTENT_TYPE_XML          = "text/xml"
	CONTENT_TYPE_MPEG_VIDEO   = "video/mpeg"
	CONTENT_TYPE_MP4_VIDEO    = "video/mp4"
	CONTENT_TYPE_OGG_VIDEO    = "video/ogg"
	CONTENT_TYPE_QUICKTIME    = "video/quicktime"
	CONTENT_TYPE_WEBM_VIDEO   = "video/webm"
	CONTENT_TYPE_WMV          = "video/x-ms-wmv"
	CONTENT_TYPE_FLV          = "video/x-flv"
	CONTENT_TYPE_3GPP         = "video/3gpp"
	CONTENT_TYPE_3GPP2        = "video/3gpp2"
)

Content types

View Source
const (
	STATUS_CONTINUE                        = 100 // RFC 7231, 6.2.1
	STATUS_SWITCHING_PROTOCOLS             = 101 // RFC 7231, 6.2.2
	STATUS_PROCESSING                      = 102 // RFC 2518, 10.1
	STATUS_OK                              = 200 // RFC 7231, 6.3.1
	STATUS_CREATED                         = 201 // RFC 7231, 6.3.2
	STATUS_ACCEPTED                        = 202 // RFC 7231, 6.3.3
	STATUS_NON_AUTHORITATIVE_INFO          = 203 // RFC 7231, 6.3.4
	STATUS_NO_CONTENT                      = 204 // RFC 7231, 6.3.5
	STATUS_RESET_CONTENT                   = 205 // RFC 7231, 6.3.6
	STATUS_PARTIAL_CONTENT                 = 206 // RFC 7233, 4.1
	STATUS_MULTI_STATUS                    = 207 // RFC 4918, 11.1
	STATUS_ALREADY_REPORTED                = 208 // RFC 5842, 7.1
	STATUS_IMUSED                          = 226 // RFC 3229, 10.4.1
	STATUS_MULTIPLE_CHOICES                = 300 // RFC 7231, 6.4.1
	STATUS_MOVED_PERMANENTLY               = 301 // RFC 7231, 6.4.2
	STATUS_FOUND                           = 302 // RFC 7231, 6.4.3
	STATUS_SEE_OTHER                       = 303 // RFC 7231, 6.4.4
	STATUS_NOT_MODIFIED                    = 304 // RFC 7232, 4.1
	STATUS_USE_PROXY                       = 305 // RFC 7231, 6.4.5
	STATUS_TEMPORARY_REDIRECT              = 307 // RFC 7231, 6.4.7
	STATUS_PERMANENT_REDIRECT              = 308 // RFC 7538, 3
	STATUS_BAD_REQUEST                     = 400 // RFC 7231, 6.5.1
	STATUS_UNAUTHORIZED                    = 401 // RFC 7235, 3.1
	STATUS_PAYMENT_REQUIRED                = 402 // RFC 7231, 6.5.2
	STATUS_FORBIDDEN                       = 403 // RFC 7231, 6.5.3
	STATUS_NOT_FOUND                       = 404 // RFC 7231, 6.5.4
	STATUS_METHOD_NOT_ALLOWED              = 405 // RFC 7231, 6.5.5
	STATUS_NOT_ACCEPTABLE                  = 406 // RFC 7231, 6.5.6
	STATUS_PROXY_AUTH_REQUIRED             = 407 // RFC 7235, 3.2
	STATUS_REQUEST_TIMEOUT                 = 408 // RFC 7231, 6.5.7
	STATUS_CONFLICT                        = 409 // RFC 7231, 6.5.8
	STATUS_GONE                            = 410 // RFC 7231, 6.5.9
	STATUS_LENGTH_REQUIRED                 = 411 // RFC 7231, 6.5.10
	STATUS_PRECONDITION_FAILED             = 412 // RFC 7232, 4.2
	STATUS_REQUEST_ENTITY_TOO_LARGE        = 413 // RFC 7231, 6.5.11
	STATUS_REQUEST_URITOO_LONG             = 414 // RFC 7231, 6.5.12
	STATUS_UNSUPPORTED_MEDIA_TYPE          = 415 // RFC 7231, 6.5.13
	STATUS_REQUESTED_RANGE_NOT_SATISFIABLE = 416 // RFC 7233, 4.4
	STATUS_EXPECTATION_FAILED              = 417 // RFC 7231, 6.5.14
	STATUS_TEAPOT                          = 418 // RFC 7168, 2.3.3
	STATUS_UNPROCESSABLE_ENTITY            = 422 // RFC 4918, 11.2
	STATUS_LOCKED                          = 423 // RFC 4918, 11.3
	STATUS_FAILED_DEPENDENCY               = 424 // RFC 4918, 11.4
	STATUS_UPGRADE_REQUIRED                = 426 // RFC 7231, 6.5.15
	STATUS_PRECONDITION_REQUIRED           = 428 // RFC 6585, 3
	STATUS_TOO_MANY_REQUESTS               = 429 // RFC 6585, 4
	STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431 // RFC 6585, 5
	STATUS_UNAVAILABLE_FOR_LEGAL_REASONS   = 451 // RFC 7725, 3
	STATUS_INTERNAL_SERVER_ERROR           = 500 // RFC 7231, 6.6.1
	STATUS_NOT_IMPLEMENTED                 = 501 // RFC 7231, 6.6.2
	STATUS_BAD_GATEWAY                     = 502 // RFC 7231, 6.6.3
	STATUS_SERVICE_UNAVAILABLE             = 503 // RFC 7231, 6.6.4
	STATUS_GATEWAY_TIMEOUT                 = 504 // RFC 7231, 6.6.5
	STATUS_HTTPVERSION_NOT_SUPPORTED       = 505 // RFC 7231, 6.6.6
	STATUS_VARIANT_ALSO_NEGOTIATES         = 506 // RFC 2295, 8.1
	STATUS_INSUFFICIENT_STORAGE            = 507 // RFC 4918, 11.5
	STATUS_LOOP_DETECTED                   = 508 // RFC 5842, 7.2
	STATUS_NOT_EXTENDED                    = 510 // RFC 2774, 7
	STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511 // RFC 6585, 6
)

Status codes

View Source
const USER_AGENT = "ek.go"

USER_AGENT is default user agent

Variables

View Source
var (
	// ErrNilEngine is returned if engine struct is nil
	ErrNilEngine = RequestError{ERROR_CREATE_REQUEST, "Engine is nil"}

	// ErrNilClient is returned if client struct is nil
	ErrNilClient = RequestError{ERROR_CREATE_REQUEST, "Engine.Client is nil"}

	// ErrNilTransport is returned if transport is nil
	ErrNilTransport = RequestError{ERROR_CREATE_REQUEST, "Engine.Transport is nil"}

	// ErrNilDialer is returned if dialer is nil
	ErrNilDialer = RequestError{ERROR_CREATE_REQUEST, "Engine.Dialer is nil"}

	// ErrNilResponse is returned if response is nil
	ErrNilResponse = RequestError{ERROR_CREATE_REQUEST, "Response is nil"}

	// ErrEmptyURL is returned if given URL is empty
	ErrEmptyURL = RequestError{ERROR_CREATE_REQUEST, "URL property can't be empty and must be set"}

	// ErrUnsupportedScheme is returned if given URL contains unsupported scheme
	ErrUnsupportedScheme = RequestError{ERROR_CREATE_REQUEST, "Unsupported scheme in URL"}
)
View Source
var (
	// ErrNilEngine is returned if retrier struct is nil
	ErrNilRetrier = fmt.Errorf("Retrier is nil")
)
View Source
var Global = &Engine{
	dialTimeout: 10.0,
}

Global is global engine used by default for Request.Do, Request.Get, Request.Post, Request.Put, Request.Patch, Request.Head and Request.Delete methods

Functions

func SetDialTimeout

func SetDialTimeout(timeout float64)

SetDialTimeout sets dial timeout for global engine

func SetLimit added in v13.11.0

func SetLimit(rps float64)

SetLimit sets a hard limit on the number of requests per second (useful for working with APIs)

func SetRequestTimeout

func SetRequestTimeout(timeout float64)

SetRequestTimeout sets request timeout for global engine

func SetUserAgent

func SetUserAgent(app, version string, subs ...string)

SetUserAgent sets user agent based on app name and version for global engine

Types

type Auth added in v13.15.0

type Auth interface {
	// Apply sets authentication data for given request
	Apply(r *http.Request, header string)
}

Auth is interface for authentication method

type AuthAPIKey added in v13.15.0

type AuthAPIKey struct {
	Key string
}

AuthAPIKey is auth using X-API-Key/API-Key header

func (AuthAPIKey) Apply added in v13.15.0

func (a AuthAPIKey) Apply(r *http.Request, header string)

Apply sets authentication data for given request

type AuthAWS4 added in v13.15.0

type AuthAWS4 struct {
	Credential    string
	SignedHeaders string
	Signature     string
}

AuthAWS4 is auth using AWS Signature Version 4

https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html

func (AuthAWS4) Apply added in v13.15.0

func (a AuthAWS4) Apply(r *http.Request, header string)

Apply sets authentication data for given request

type AuthBasic added in v13.15.0

type AuthBasic struct {
	Username string
	Password string
}

AuthBasic is auth using username and password (RFC 7617)

https://datatracker.ietf.org/doc/html/rfc7617

func (AuthBasic) Apply added in v13.15.0

func (a AuthBasic) Apply(r *http.Request, header string)

Apply sets authentication data for given request

type AuthBearer added in v13.15.0

type AuthBearer struct {
	Token string
}

AuthOAuth is auth using Bearer token (RFC 6750)

https://datatracker.ietf.org/doc/html/rfc6750

func (AuthBearer) Apply added in v13.15.0

func (a AuthBearer) Apply(r *http.Request, header string)

Apply sets authentication data for given request

type AuthDigest added in v13.15.0

type AuthDigest struct {
	Username  string
	Realm     string
	URI       string
	Algorithm string
	Nonce     string
	CNonce    string
	NC        uint
	QOP       string
	Response  string
	Opaque    string
	UserHash  bool
}

AuthDigest is auth using Digest Auth (RFC 7616)

https://datatracker.ietf.org/doc/html/rfc7616

func (AuthDigest) Apply added in v13.15.0

func (a AuthDigest) Apply(r *http.Request, header string)

Apply sets authentication data for given request

type AuthOAuth added in v13.15.0

type AuthOAuth struct {
	Realm           string
	ConsumerKey     string
	Token           string
	SignatureMethod string
	Signature       string
	Nonce           string
	Version         string
	Timestamp       int64
}

AuthOAuth is auth using OAuth token

https://www.rfc-editor.org/rfc/rfc5849.html#section-3.5.1

func (AuthOAuth) Apply added in v13.15.0

func (a AuthOAuth) Apply(r *http.Request, header string)

Apply sets authentication data for given request

type AuthVAPID added in v13.15.0

type AuthVAPID struct {
	Credential    string
	SignedHeaders string
	Signature     string
}

AuthVAPID s auth using Voluntary Application Server Identification (RFC 8292)

https://datatracker.ietf.org/doc/html/rfc8292

type Engine

type Engine struct {
	UserAgent string // UserAgent is default user-agent used for all requests

	Dialer    *net.Dialer     // Dialer is default dialer struct
	Transport *http.Transport // Transport is default transport struct
	Client    *http.Client    // Client is default client struct
	// contains filtered or unexported fields
}

Engine is request engine

func (*Engine) Delete

func (e *Engine) Delete(r Request) (*Response, error)

Delete sends DELETE request and process response

func (*Engine) Do

func (e *Engine) Do(r Request) (*Response, error)

Do sends request and process response

func (*Engine) Get

func (e *Engine) Get(r Request) (*Response, error)

Get sends GET request and process response

func (*Engine) Head

func (e *Engine) Head(r Request) (*Response, error)

Head sends HEAD request and process response

func (*Engine) Init

func (e *Engine) Init() *Engine

Init initializes engine

func (*Engine) Patch

func (e *Engine) Patch(r Request) (*Response, error)

Patch sends PATCH request and process response

func (*Engine) Post

func (e *Engine) Post(r Request) (*Response, error)

Post sends POST request and process response

func (*Engine) PostFile

func (e *Engine) PostFile(r Request, file, fieldName string, extraFields map[string]string) (*Response, error)

PostFile sends multipart POST request with file data

func (*Engine) Put

func (e *Engine) Put(r Request) (*Response, error)

Put sends PUT request and process response

func (*Engine) SetDialTimeout

func (e *Engine) SetDialTimeout(timeout float64)

SetDialTimeout sets dial timeout

func (*Engine) SetLimit added in v13.11.0

func (e *Engine) SetLimit(rps float64)

SetLimit sets a hard limit on the number of requests per second (useful for working with APIs)

func (*Engine) SetRequestTimeout

func (e *Engine) SetRequestTimeout(timeout float64)

SetRequestTimeout sets request timeout

func (*Engine) SetUserAgent

func (e *Engine) SetUserAgent(app, version string, subs ...string)

SetUserAgent sets user agent based on app name and version

type Headers

type Headers map[string]string

Headers is a map[string]string used for headers

type Limiter added in v13.12.0

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

Limiter is request limiter

func NewLimiter added in v13.12.0

func NewLimiter(rps float64) *Limiter

NewLimiter creates a new limiter. If rps is less than or equal to 0, it returns nil.

func (*Limiter) Wait added in v13.12.0

func (l *Limiter) Wait()

Wait blocks current goroutine execution until next time slot become available

type Query

type Query map[string]any

Query is a map[string]any used for query

func (Query) Encode

func (q Query) Encode() string

Encode converts query struct to URL-encoded string

type QueryPayload added in v13.13.0

type QueryPayload interface {
	// ToQuery encodes payload for using in query string
	ToQuery(name string) string
}

QueryPayload is an interface for query payload with custom encoder

type Request

type Request struct {
	Method         string        // Request method
	URL            string        // Request URL
	Query          Query         // Map with query params
	Auth           Auth          // Authentication data
	ProxyAuth      Auth          // Proxy authentication data
	Body           any           // Request body
	Headers        Headers       // Map with headers
	ContentType    string        // Content type header
	Accept         string        // Accept header
	Timeout        time.Duration // Request timeout
	AutoDiscard    bool          // Automatically discard all responses with status code > 299
	FollowRedirect bool          // Follow redirect
	Close          bool          // Close indicates whether to close the connection after sending request
}

Request is basic struct

func (Request) Delete

func (r Request) Delete() (*Response, error)

Delete sends DELETE request and process response

func (Request) Do

func (r Request) Do() (*Response, error)

Do sends request and process response

Example
var response = struct {
	User    string  `json:"user"`
	ID      int     `json:"id"`
	Balance float64 `json:"balance"`
}{}

// Configure global engine
SetUserAgent("my-supper-app", "1.0")
SetDialTimeout(30.0)
SetRequestTimeout(30.0)
SetLimit(15.0)

resp, err := Request{
	Method: GET,
	URL:    "https://my.domain.com",
	Query: Query{
		// will be encoded as element without value
		"custom":   nil,
		"name":     "Bob",
		"id":       120,
		"progress": 12.34,
		// will be encoded as "groups=admins,regular"
		"groups": []string{"admins", "regular"},
		// will be encoded as "zones[]=a&zones[]=b"
		"zones[]": []string{"a", "b"},
	},
	Headers: Headers{
		"My-Suppa-Header": "Test",
	},
	ContentType: CONTENT_TYPE_JSON,
}.Do()

if err != nil {
	fmt.Printf("Error: %v\n", err)
}

// print status code
fmt.Printf("Status code: %d\n", resp.StatusCode)

// decode JSON encoded response
err = resp.JSON(response)

if err != nil {
	fmt.Printf("Error: %v\n", err)
}

// print response data
fmt.Printf(
	"User: %s ID: %d Balance: %f\n",
	response.User, response.ID, response.Balance,
)
Output:

func (Request) Get

func (r Request) Get() (*Response, error)

Get sends GET request and process response

Example
var response = struct {
	User    string  `json:"user"`
	ID      int     `json:"id"`
	Balance float64 `json:"balance"`
}{}

resp, err := Request{URL: "https://my.domain.com"}.Get()

if err != nil {
	fmt.Printf("Error: %v\n", err)
}

// decode json encoded response
err = resp.JSON(response)

if err != nil {
	fmt.Printf("Error: %v\n", err)
}

// print response data
fmt.Printf(
	"User: %s ID: %d Balance: %f\n",
	response.User, response.ID, response.Balance,
)
Output:

func (Request) Head

func (r Request) Head() (*Response, error)

Head sends HEAD request and process response

func (Request) Patch

func (r Request) Patch() (*Response, error)

Patch sends PATCH request and process response

func (Request) Post

func (r Request) Post() (*Response, error)

Post sends POST request and process response

Example
var request = struct {
	UserID int `json:"user_id"`
}{
	UserID: 1234,
}

var response = struct {
	User    string  `json:"user"`
	ID      int     `json:"id"`
	Balance float64 `json:"balance"`
}{}

// send post request with basic auth
resp, err := Request{
	URL:         "https://my.domain.com",
	Body:        request,
	Accept:      CONTENT_TYPE_JSON,
	ContentType: CONTENT_TYPE_JSON,
	Auth:        AuthBasic{"john", "test1234"},
	AutoDiscard: true,
}.Post()

if err != nil {
	fmt.Printf("Error: %v\n", err)
}

// decode JSON encoded response
err = resp.JSON(response)

if err != nil {
	fmt.Printf("Error: %v\n", err)
}

// print response data
fmt.Printf(
	"User: %s ID: %d Balance: %f\n",
	response.User, response.ID, response.Balance,
)
Output:

func (Request) PostFile

func (r Request) PostFile(file, fieldName string, extraFields map[string]string) (*Response, error)

PostFile sends multipart POST request with file data

Example
extraFields := map[string]string{
	"user": "john",
	"desc": "My photo",
}

// send multipart request with image
resp, err := Request{
	URL: "https://my.domain.com",
}.PostFile("/tmp/image.jpg", "file", extraFields)

if err != nil {
	fmt.Printf("Error: %v\n", err)
	return
}

if resp.StatusCode != 200 {
	fmt.Printf("Can't upload file: %v\n", err)
	return
}

fmt.Println("File successfully uploaded!")
Output:

func (Request) Put

func (r Request) Put() (*Response, error)

Put sends PUT request and process response

type RequestError

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

RequestError is error struct

func (RequestError) Error

func (e RequestError) Error() string

Error shows error message

type Response

type Response struct {
	*http.Response
	URL string
}

Response is struct contains response data and properties

func (*Response) Bytes

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

Bytes reads response body as byte slice

func (*Response) Discard

func (r *Response) Discard()

Discard reads response body for closing connection

func (*Response) JSON

func (r *Response) JSON(v any) error

JSON decodes json encoded body

func (*Response) String

func (r *Response) String() string

String reads response body as string

type Retrier added in v13.12.0

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

Retrier is retrier struct

func NewRetrier added in v13.12.0

func NewRetrier(e ...*Engine) *Retrier

NewRetrier creates new retrier instance

Example
r := NewRetrier()

resp, err := r.Get(
	Request{URL: "https://my.domain.com"},
	Retry{Num: 5, Status: STATUS_OK, Pause: time.Second},
)

if err != nil {
	fmt.Printf("Error: %v\n", err)
	return
}

// print status code
fmt.Printf("Status code: %d\n", resp.StatusCode)
Output:

func (*Retrier) Delete added in v13.12.0

func (rt *Retrier) Delete(r Request, rr Retry) (*Response, error)

Delete tries to send DELETE request

func (*Retrier) Do added in v13.12.0

func (rt *Retrier) Do(r Request, rr Retry) (*Response, error)

Delete tries to send given request

func (*Retrier) Get added in v13.12.0

func (rt *Retrier) Get(r Request, rr Retry) (*Response, error)

Delete tries to send GET request

func (*Retrier) Head added in v13.12.0

func (rt *Retrier) Head(r Request, rr Retry) (*Response, error)

Delete tries to send HEAD request

func (*Retrier) Patch added in v13.12.0

func (rt *Retrier) Patch(r Request, rr Retry) (*Response, error)

Delete tries to send PATCH request

func (*Retrier) Post added in v13.12.0

func (rt *Retrier) Post(r Request, rr Retry) (*Response, error)

Delete tries to send POST request

func (*Retrier) Put added in v13.12.0

func (rt *Retrier) Put(r Request, rr Retry) (*Response, error)

Delete tries to send PUT request

type Retry added in v13.12.0

type Retry struct {
	Num       int           // Number of tries (1 or more)
	Pause     time.Duration // Pause between tries
	Status    int           // Required HTTP status (100-599)
	MinStatus int           // Minimal HTTP status number (100-599)
}

Retry contains retry configuration

func (Retry) Validate added in v13.12.0

func (r Retry) Validate() error

Validate validates retry configuration

Jump to

Keyboard shortcuts

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