requests

package module
v0.2.2 Latest Latest
Warning

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

Go to latest
Published: Apr 15, 2024 License: MIT Imports: 24 Imported by: 0

README

Golang Requests Library

The Requests library simplifies the way you make HTTP requests in Go. It provides an easy-to-use interface for sending requests and handling responses, reducing the boilerplate code typically associated with the net/http package.

Quick Start

Begin by installing the Requests library:

go get github.com/kaptinlin/requests

Creating a new HTTP client and making a request is straightforward:

package main

import (
    "github.com/kaptinlin/requests"
    "log"
)

func main() {
    // Create a client using a base URL
    client := requests.URL("http://example.com")

    // Alternatively, create a client with custom configuration
    client = requests.Create(&requests.Config{
        BaseURL: "http://example.com",
        Timeout: 30 * time.Second,
    })

    // Perform a GET request
    resp, err := client.Get("/resource")
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Close()

    log.Println(resp.String())
}

Overview

Client

The Client struct is your gateway to making HTTP requests. You can configure it to your needs, setting default headers, cookies, timeout durations, and more.

Usage Example:
client := requests.URL("http://example.com")

// Or, with full configuration
client = requests.Create(&requests.Config{
    BaseURL: "http://example.com",
    Timeout: 5 * time.Second,
    Headers: &http.Header{
        "Content-Type": []string{"application/json"},
    },
})

For more details, see docs/client.md.

Request

The library provides a RequestBuilder to construct and dispatch HTTP requests. Here are examples of performing various types of requests, including adding query parameters, setting headers, and attaching a body to your requests.

GET Request

To retrieve data from a specific resource:

resp, err := client.Get("/path").
    Query("search", "query").
    Header("Accept", "application/json").
    Send(context.Background())
POST Request

To submit data to be processed to a specific resource:

resp, err := client.Post("/path").
    Header("Content-Type", "application/json").
    JSONBody(map[string]interface{}{"key": "value"}).
    Send(context.Background())
PUT Request

To replace all current representations of the target resource with the request payload:

resp, err := client.Put("/articles/{article_id}").
    PathParam("article_id", "123456").
    JSONBody(map[string]interface{}{"updatedKey": "newValue"}).
    Send(context.Background())
DELETE Request

To remove all current representations of the target resource:

resp, err := client.Delete("/articles/{article_id}").
    PathParam("article_id", "123456").
    Send(context.Background())

For more details, visit docs/request.md.

Response

Handling responses is crucial in determining the outcome of your HTTP requests. The Requests library makes it easy to check status codes, read headers, and parse the body content.

Example

Parsing JSON response into a Go struct:

type APIResponse struct {
    Data string `json:"data"`
}

var apiResp APIResponse
if err := resp.ScanJSON(&apiResp); err != nil {
    log.Fatal(err)
}

log.Printf("Status Code: %d\n", resp.StatusCode())
log.Printf("Response Data: %s\n", apiResp.Data)

This example demonstrates how to unmarshal a JSON response and check the HTTP status code.

For more on handling responses, see docs/response.md.

Additional Resources

  • Logging: Learn how to configure logging for your requests. See docs/logging.md.
  • Middleware: Extend functionality with custom middleware. See docs/middleware.md.
  • Retry Mechanism: Implement retry strategies for transient errors. See docs/retry.md.
  • Stream Support: Utilize streaming for real-time data processing. See docs/stream.md.

Credits

This library was inspired by and built upon the work of several other HTTP client libraries:

How to Contribute

Contributions to the requests package are welcome. If you'd like to contribute, please follow the contribution guidelines.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DefaultFormEncoder = &FormEncoder{}

DefaultFormEncoder instance

View Source
var DefaultJSONDecoder = &JSONDecoder{
	UnmarshalFunc: json.Unmarshal,
}

DefaultJSONDecoder instance using the standard json.Unmarshal function

View Source
var DefaultJSONEncoder = &JSONEncoder{
	MarshalFunc: json.Marshal,
}

DefaultJSONEncoder instance using the standard json.Marshal function

View Source
var DefaultXMLDecoder = &XMLDecoder{
	UnmarshalFunc: xml.Unmarshal,
}

DefaultXMLDecoder instance using the standard xml.Unmarshal function

View Source
var DefaultXMLEncoder = &XMLEncoder{
	MarshalFunc: xml.Marshal,
}

DefaultXMLEncoder instance using the standard xml.Marshal function

View Source
var DefaultYAMLDecoder = &YAMLDecoder{
	UnmarshalFunc: yaml.Unmarshal,
}

DefaultYAMLDecoder instance using the goccy/go-yaml Unmarshal function

View Source
var DefaultYAMLEncoder = &YAMLEncoder{
	MarshalFunc: yaml.Marshal,
}

DefaultYAMLEncoder instance using the goccy/go-yaml Marshal function

View Source
var ErrEncodingFailed = errors.New("encoding failed")

ErrEncodingFailed is returned when the encoding fails.

View Source
var ErrInvalidTransportType = errors.New("invalid transport type")

ErrInvalidTransportType is returned when the transport type is invalid.

View Source
var ErrNotSupportSaveMethod = errors.New("the provided type for saving is not supported")

ErrNotSupportSaveMethod is returned when the provided type for saving is not supported.

View Source
var ErrRequestCreationFailed = errors.New("failed to create request")

ErrRequestCreationFailed is returned when the request cannot be created.

View Source
var ErrResponseNil = errors.New("response is nil")

ErrResponseNil is returned when the response is nil.

View Source
var ErrResponseReadFailed = errors.New("failed to read response")

ErrResponseReadFailed is returned when the response cannot be read.

View Source
var ErrUnsupportedContentType = errors.New("unsupported content type")

ErrUnsupportedContentType is returned when the content type is unsupported.

View Source
var ErrUnsupportedDataType = errors.New("unsupported data type")

ErrUnsupportedDataType is returned when the data type is unsupported.

View Source
var ErrUnsupportedFormFieldsType = errors.New("unsupported form fields type")

ErrUnsupportedFormFieldsType is returned when the form fields type is unsupported.

View Source
var ErrUnsupportedScheme = errors.New("unsupported proxy scheme")

ErrUnsupportedScheme is returned when the proxy scheme is unsupported.

Functions

func DefaultBackoffStrategy

func DefaultBackoffStrategy(delay time.Duration) func(int) time.Duration

DefaultBackoffStrategy provides a simple constant delay between retries.

func DefaultRetryIf

func DefaultRetryIf(req *http.Request, resp *http.Response, err error) bool

DefaultRetryIf is a simple retry condition that retries on 5xx status codes.

func ExponentialBackoffStrategy

func ExponentialBackoffStrategy(initialInterval time.Duration, multiplier float64, maxBackoffTime time.Duration) func(int) time.Duration

ExponentialBackoffStrategy increases the delay exponentially with each retry attempt.

func GetBuffer

func GetBuffer() *bytebufferpool.ByteBuffer

GetBuffer retrieves a buffer from the pool

func LinearBackoffStrategy

func LinearBackoffStrategy(initialInterval time.Duration) func(int) time.Duration

LinearBackoffStrategy increases the delay linearly with each retry attempt. The delay increments by `initialInterval` with each attempt.

func PutBuffer

func PutBuffer(b *bytebufferpool.ByteBuffer)

PutBuffer returns a buffer to the pool

Types

type AuthMethod

type AuthMethod interface {
	Apply(req *http.Request)
	Valid() bool
}

AuthMethod defines the interface for applying authentication strategies to requests.

type BackoffStrategy

type BackoffStrategy func(attempt int) time.Duration

BackoffStrategy defines a function that returns the delay before the next retry.

type BasicAuth

type BasicAuth struct {
	Username string
	Password string
}

BasicAuth represents HTTP Basic Authentication credentials.

func (BasicAuth) Apply

func (b BasicAuth) Apply(req *http.Request)

Apply adds the Basic Auth credentials to the request.

func (BasicAuth) Valid

func (b BasicAuth) Valid() bool

Valid checks if the Basic Auth credentials are present.

type BearerAuth

type BearerAuth struct {
	Token string
}

BearerAuth represents an OAuth 2.0 Bearer token.

func (BearerAuth) Apply

func (b BearerAuth) Apply(req *http.Request)

Apply adds the Bearer token to the request's Authorization header.

func (BearerAuth) Valid

func (b BearerAuth) Valid() bool

Valid checks if the Bearer token is present.

type Client

type Client struct {
	BaseURL       string
	Headers       *http.Header
	Cookies       []*http.Cookie
	Middlewares   []Middleware
	TLSConfig     *tls.Config
	MaxRetries    int             // Maximum number of retry attempts
	RetryStrategy BackoffStrategy // The backoff strategy function
	RetryIf       RetryIfFunc     // Custom function to determine retry based on request and response
	HTTPClient    *http.Client
	JSONEncoder   Encoder
	JSONDecoder   Decoder
	XMLEncoder    Encoder
	XMLDecoder    Decoder
	YAMLEncoder   Encoder
	YAMLDecoder   Decoder
	Logger        Logger
	// contains filtered or unexported fields
}

Client represents an HTTP client

func Create

func Create(config *Config) *Client

Create initializes a new HTTP client with the given configuration.

func URL

func URL(baseURL string) *Client

URL creates a new HTTP client with the given base URL.

func (*Client) AddDefaultHeader

func (c *Client) AddDefaultHeader(key, value string)

AddDefaultHeader adds a default header

func (*Client) AddMiddleware

func (c *Client) AddMiddleware(middlewares ...Middleware)

AddMiddleware adds a middleware to the client

func (*Client) CONNECT

func (c *Client) CONNECT(path string) *RequestBuilder

CONNECT initiates a CONNECT request

func (*Client) Custom

func (c *Client) Custom(path, method string) *RequestBuilder

Custom initiates a custom request

func (*Client) DelDefaultCookie

func (c *Client) DelDefaultCookie(name string)

DelDefaultCookie removes a default cookie from the client

func (*Client) DelDefaultHeader

func (c *Client) DelDefaultHeader(key string)

DelDefaultHeader removes a default header.

func (*Client) Delete

func (c *Client) Delete(path string) *RequestBuilder

Delete initiates a DELETE request

func (*Client) Get

func (c *Client) Get(path string) *RequestBuilder

Get initiates a GET request

func (*Client) Head

func (c *Client) Head(path string) *RequestBuilder

Head initiates a HEAD request

func (*Client) InsecureSkipVerify

func (c *Client) InsecureSkipVerify() *Client

InsecureSkipVerify sets the TLS configuration to skip certificate verification.

func (*Client) NewRequestBuilder

func (c *Client) NewRequestBuilder(method, path string) *RequestBuilder

NewRequestBuilder creates a new RequestBuilder with default settings

func (*Client) Options

func (c *Client) Options(path string) *RequestBuilder

Options initiates an OPTIONS request

func (*Client) Patch

func (c *Client) Patch(path string) *RequestBuilder

Patch initiates a PATCH request

func (*Client) Post

func (c *Client) Post(path string) *RequestBuilder

Post initiates a POST request

func (*Client) Put

func (c *Client) Put(path string) *RequestBuilder

Put initiates a PUT request

func (*Client) RemoveProxy

func (c *Client) RemoveProxy()

RemoveProxy clears any configured proxy, allowing direct connections.

func (*Client) SetAuth

func (c *Client) SetAuth(auth AuthMethod)

SetAuth configures an authentication method for the client.

func (*Client) SetBaseURL

func (c *Client) SetBaseURL(baseURL string)

SetBaseURL sets the base URL for the client

func (*Client) SetDefaultAccept

func (c *Client) SetDefaultAccept(accept string)

SetDefaultAccept sets the default accept header for the client

func (*Client) SetDefaultContentType

func (c *Client) SetDefaultContentType(contentType string)

SetDefaultContentType sets the default content type for the client

func (*Client) SetDefaultCookie

func (c *Client) SetDefaultCookie(name, value string)

SetDefaultCookie sets a default cookie for the client

func (*Client) SetDefaultCookieJar

func (c *Client) SetDefaultCookieJar(jar *cookiejar.Jar)

SetDefaultCookieJar sets the default cookie jar for the client

func (*Client) SetDefaultCookies

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

SetDefaultCookies sets the default cookies for the client

func (*Client) SetDefaultHeader

func (c *Client) SetDefaultHeader(key, value string)

SetDefaultHeader adds or updates a default header

func (*Client) SetDefaultHeaders

func (c *Client) SetDefaultHeaders(headers *http.Header)

SetDefaultHeaders sets the default headers for the client

func (*Client) SetDefaultReferer

func (c *Client) SetDefaultReferer(referer string)

SetDefaultReferer sets the default referer for the client

func (*Client) SetDefaultTimeout

func (c *Client) SetDefaultTimeout(timeout time.Duration)

SetDefaultTimeout sets the default timeout for the client

func (*Client) SetDefaultTransport

func (c *Client) SetDefaultTransport(transport http.RoundTripper)

SetDefaultTransport sets the default transport for the client

func (*Client) SetDefaultUserAgent

func (c *Client) SetDefaultUserAgent(userAgent string)

SetDefaultUserAgent sets the default user agent for the client

func (*Client) SetHTTPClient

func (c *Client) SetHTTPClient(httpClient *http.Client)

SetHTTPClient sets the HTTP client for the client

func (*Client) SetJSONMarshal

func (c *Client) SetJSONMarshal(marshalFunc func(v any) ([]byte, error))

SetJSONMarshal sets the JSON marshal function for the client's JSONEncoder

func (*Client) SetJSONUnmarshal

func (c *Client) SetJSONUnmarshal(unmarshalFunc func(data []byte, v any) error)

SetJSONUnmarshal sets the JSON unmarshal function for the client's JSONDecoder

func (*Client) SetLogger

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

SetLogger sets logger instance in client.

func (*Client) SetMaxRetries

func (c *Client) SetMaxRetries(maxRetries int) *Client

SetMaxRetries sets the maximum number of retry attempts

func (*Client) SetProxy

func (c *Client) SetProxy(proxyURL string) error

SetProxy configures the client to use a proxy. Supports http, https, and socks5 proxies.

func (*Client) SetRetryIf

func (c *Client) SetRetryIf(retryIf RetryIfFunc) *Client

SetRetryIf sets the custom retry condition function

func (*Client) SetRetryStrategy

func (c *Client) SetRetryStrategy(strategy BackoffStrategy) *Client

SetRetryStrategy sets the backoff strategy for retries

func (*Client) SetTLSConfig

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

SetTLSConfig sets the TLS configuration for the client.

func (*Client) SetXMLMarshal

func (c *Client) SetXMLMarshal(marshalFunc func(v any) ([]byte, error))

SetXMLMarshal sets the XML marshal function for the client's XMLEncoder

func (*Client) SetXMLUnmarshal

func (c *Client) SetXMLUnmarshal(unmarshalFunc func(data []byte, v any) error)

SetXMLUnmarshal sets the XML unmarshal function for the client's XMLDecoder

func (*Client) SetYAMLMarshal

func (c *Client) SetYAMLMarshal(marshalFunc func(v any) ([]byte, error))

SetYAMLMarshal sets the YAML marshal function for the client's YAMLEncoder

func (*Client) SetYAMLUnmarshal

func (c *Client) SetYAMLUnmarshal(unmarshalFunc func(data []byte, v any) error)

SetYAMLUnmarshal sets the YAML unmarshal function for the client's YAMLDecoder

func (*Client) TRACE

func (c *Client) TRACE(path string) *RequestBuilder

TRACE initiates a TRACE request

type Config

type Config struct {
	BaseURL       string            // The base URL for all requests made by this client.
	Headers       *http.Header      // Default headers to be sent with each request.
	Cookies       map[string]string // Default Cookies to be sent with each request.
	Timeout       time.Duration     // Timeout for requests.
	CookieJar     *cookiejar.Jar    // Cookie jar for the client.
	Middlewares   []Middleware      // Middleware stack for request/response manipulation.
	TLSConfig     *tls.Config       // TLS configuration for the client.
	Transport     http.RoundTripper // Custom transport for the client.
	MaxRetries    int               // Maximum number of retry attempts
	RetryStrategy BackoffStrategy   // The backoff strategy function
	RetryIf       RetryIfFunc       // Custom function to determine retry based on request and response
	Logger        Logger            // Logger instance for the client
}

Config sets up the initial configuration for the HTTP client.

type CustomAuth

type CustomAuth struct {
	Header string
}

CustomAuth allows for custom Authorization header values.

func (CustomAuth) Apply

func (c CustomAuth) Apply(req *http.Request)

Apply sets a custom Authorization header value.

func (CustomAuth) Valid

func (c CustomAuth) Valid() bool

Valid checks if the custom Authorization header value is present.

type Decoder

type Decoder interface {
	Decode(r io.Reader, v any) error
}

Decoder is the interface that wraps the Decode method.

type DefaultLogger

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

DefaultLogger is a default logger that uses `slog` as the underlying logger.

func (*DefaultLogger) Debugf added in v0.1.1

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

Debugf logs a message at the Debug level.

func (*DefaultLogger) Errorf added in v0.1.1

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

Errorf logs a message at the Error level.

func (*DefaultLogger) Infof added in v0.1.1

func (l *DefaultLogger) Infof(format string, v ...any)

Infof logs a message at the Info level.

func (*DefaultLogger) SetLevel added in v0.1.1

func (l *DefaultLogger) SetLevel(level Level)

SetLevel sets the log level of the logger.

func (*DefaultLogger) Warnf added in v0.1.1

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

Warnf logs a message at the Warn level.

type Encoder

type Encoder interface {
	Encode(v any) (io.Reader, error)
	ContentType() string
}

Encoder is the interface that wraps the Encode method.

type File

type File struct {
	Name     string        // Form field name
	FileName string        // File name
	Content  io.ReadCloser // File content
}

File represents a form file

func (*File) SetContent

func (f *File) SetContent(content io.ReadCloser)

SetContent sets the content of the file

func (*File) SetFileName

func (f *File) SetFileName(fileName string)

SetFileName sets the file name

func (*File) SetName

func (f *File) SetName(name string)

SetName sets the form field name

type FormEncoder

type FormEncoder struct{}

FormEncoder handles encoding of form data.

func (*FormEncoder) Encode

func (e *FormEncoder) Encode(v any) (io.Reader, error)

Encode encodes the given value into URL-encoded form data.

type JSONDecoder

type JSONDecoder struct {
	UnmarshalFunc func(data []byte, v any) error
}

JSONDecoder handles decoding of JSON data.

func (*JSONDecoder) Decode

func (d *JSONDecoder) Decode(r io.Reader, v any) error

Decode reads the data from the reader and unmarshals it into the provided value.

type JSONEncoder

type JSONEncoder struct {
	MarshalFunc func(v any) ([]byte, error)
}

JSONEncoder handles encoding of JSON data.

func (*JSONEncoder) ContentType

func (e *JSONEncoder) ContentType() string

ContentType returns the content type for JSON data.

func (*JSONEncoder) Encode

func (e *JSONEncoder) Encode(v any) (io.Reader, error)

Encode marshals the provided value into JSON format.

type Level

type Level int

Level is a type that represents the log level.

const (
	LevelDebug Level = iota
	LevelInfo
	LevelWarn
	LevelError
)

The levels of logs.

type Logger

type Logger interface {
	Debugf(format string, v ...any)
	Infof(format string, v ...any)
	Warnf(format string, v ...any)
	Errorf(format string, v ...any)
	SetLevel(level Level)
}

Logger is a logger interface that output logs with a format.

func NewDefaultLogger added in v0.1.1

func NewDefaultLogger(output io.Writer, level Level) Logger

NewDefaultLogger creates a new `DefaultLogger` with the given output and log level.

type Middleware

type Middleware func(next MiddlewareHandlerFunc) MiddlewareHandlerFunc

Middleware defines a function that takes an http.Request and returns an http.Response and an error. It wraps around a next function call, which can be another middleware or the final transport layer call.

type MiddlewareHandlerFunc

type MiddlewareHandlerFunc func(req *http.Request) (*http.Response, error)

MiddlewareHandlerFunc defines a function that takes an http.Request and returns an http.Response and an error.

type RequestBuilder

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

RequestBuilder facilitates building and executing HTTP requests

func (*RequestBuilder) Accept

func (b *RequestBuilder) Accept(accept string) *RequestBuilder

Accept sets the Accept header for the request.

func (*RequestBuilder) AddHeader

func (b *RequestBuilder) AddHeader(key, value string) *RequestBuilder

AddHeader adds a header to the request.

func (*RequestBuilder) AddMiddleware

func (b *RequestBuilder) AddMiddleware(middlewares ...Middleware)

AddMiddleware adds a middleware to the request.

func (*RequestBuilder) Auth

func (b *RequestBuilder) Auth(auth AuthMethod) *RequestBuilder

Auth applies an authentication method to the request.

func (*RequestBuilder) Body

func (b *RequestBuilder) Body(body interface{}) *RequestBuilder

Body sets the request body

func (*RequestBuilder) ContentType

func (b *RequestBuilder) ContentType(contentType string) *RequestBuilder

ContentType sets the Content-Type header for the request.

func (*RequestBuilder) Cookie

func (b *RequestBuilder) Cookie(key, value string) *RequestBuilder

Cookie adds a cookie to the request.

func (*RequestBuilder) Cookies

func (b *RequestBuilder) Cookies(cookies map[string]string) *RequestBuilder

Cookies method for map

func (*RequestBuilder) DelCookie

func (b *RequestBuilder) DelCookie(key ...string) *RequestBuilder

DelCookie removes one or more cookies from the request.

func (*RequestBuilder) DelFile

func (b *RequestBuilder) DelFile(key ...string) *RequestBuilder

DelFile removes one or more files from the request

func (*RequestBuilder) DelFormField

func (b *RequestBuilder) DelFormField(key ...string) *RequestBuilder

DelFormField removes one or more form fields

func (*RequestBuilder) DelHeader

func (b *RequestBuilder) DelHeader(key ...string) *RequestBuilder

DelHeader removes one or more headers from the request.

func (*RequestBuilder) DelPathParam

func (b *RequestBuilder) DelPathParam(key ...string) *RequestBuilder

DelPathParam removes one or more path params fields from the RequestBuilder instance.

func (*RequestBuilder) DelQuery

func (b *RequestBuilder) DelQuery(key ...string) *RequestBuilder

DelQuery removes one or more query parameters from the request.

func (*RequestBuilder) File

func (b *RequestBuilder) File(key, filename string, content io.ReadCloser) *RequestBuilder

File adds a file to the request

func (*RequestBuilder) Files

func (b *RequestBuilder) Files(files ...*File) *RequestBuilder

Files sets multiple files at once

func (*RequestBuilder) Form

func (b *RequestBuilder) Form(v any) *RequestBuilder

Form sets form fields and files for the request

func (*RequestBuilder) FormField

func (b *RequestBuilder) FormField(key, val string) *RequestBuilder

FormField adds or updates a form field

func (*RequestBuilder) FormFields

func (b *RequestBuilder) FormFields(fields any) *RequestBuilder

FormFields sets multiple form fields at once

func (*RequestBuilder) Header

func (b *RequestBuilder) Header(key, value string) *RequestBuilder

Header sets (or replaces) a header in the request.

func (*RequestBuilder) Headers

func (b *RequestBuilder) Headers(headers http.Header) *RequestBuilder

Headers set headers to the request

func (*RequestBuilder) JSONBody added in v0.2.2

func (b *RequestBuilder) JSONBody(v interface{}) *RequestBuilder

JSONBody sets the request body as JSON

func (*RequestBuilder) MaxRetries

func (b *RequestBuilder) MaxRetries(maxRetries int) *RequestBuilder

MaxRetries sets the maximum number of retry attempts

func (*RequestBuilder) Method

func (b *RequestBuilder) Method(method string) *RequestBuilder

Method sets the HTTP method for the request.

func (*RequestBuilder) Path

func (b *RequestBuilder) Path(path string) *RequestBuilder

Path sets the URL path for the request.

func (*RequestBuilder) PathParam

func (b *RequestBuilder) PathParam(key, value string) *RequestBuilder

PathParam sets a single path param field and its value in the RequestBuilder instance.

func (*RequestBuilder) PathParams

func (b *RequestBuilder) PathParams(params map[string]string) *RequestBuilder

PathParams sets multiple path params fields and their values at one go in the RequestBuilder instance.

func (*RequestBuilder) Queries

func (b *RequestBuilder) Queries(params url.Values) *RequestBuilder

Queries adds query parameters to the request

func (*RequestBuilder) QueriesStruct

func (b *RequestBuilder) QueriesStruct(queryStruct interface{}) *RequestBuilder

QueriesStruct adds query parameters to the request based on a struct tagged with url tags.

func (*RequestBuilder) Query

func (b *RequestBuilder) Query(key, value string) *RequestBuilder

Query adds a single query parameter to the request

func (*RequestBuilder) RawBody

func (b *RequestBuilder) RawBody(v []byte) *RequestBuilder

RawBody sets the request body as raw bytes

func (*RequestBuilder) Referer

func (b *RequestBuilder) Referer(referer string) *RequestBuilder

Referer sets the Referer header for the request.

func (*RequestBuilder) RetryIf

func (b *RequestBuilder) RetryIf(retryIf RetryIfFunc) *RequestBuilder

RetryIf sets the custom retry condition function

func (*RequestBuilder) RetryStrategy

func (b *RequestBuilder) RetryStrategy(strategy BackoffStrategy) *RequestBuilder

RetryStrategy sets the backoff strategy for retries

func (*RequestBuilder) Send

func (b *RequestBuilder) Send(ctx context.Context) (*Response, error)

Send executes the HTTP request.

func (*RequestBuilder) Stream added in v0.2.0

func (b *RequestBuilder) Stream(callback StreamCallback) *RequestBuilder

Stream sets the stream callback for the request

func (*RequestBuilder) StreamDone added in v0.2.1

func (b *RequestBuilder) StreamDone(callback StreamDoneCallback) *RequestBuilder

StreamDone sets the done callback for the request.

func (*RequestBuilder) StreamErr added in v0.2.1

func (b *RequestBuilder) StreamErr(callback StreamErrCallback) *RequestBuilder

StreamErr sets the error callback for the request.

func (*RequestBuilder) TextBody

func (b *RequestBuilder) TextBody(v string) *RequestBuilder

TextBody sets the request body as plain text

func (*RequestBuilder) Timeout

func (b *RequestBuilder) Timeout(timeout time.Duration) *RequestBuilder

Timeout sets the request timeout

func (*RequestBuilder) UserAgent

func (b *RequestBuilder) UserAgent(userAgent string) *RequestBuilder

UserAgent sets the User-Agent header for the request.

func (*RequestBuilder) XMLBody

func (b *RequestBuilder) XMLBody(v interface{}) *RequestBuilder

XMLBody sets the request body as XML

func (*RequestBuilder) YAMLBody

func (b *RequestBuilder) YAMLBody(v interface{}) *RequestBuilder

YAMLBody sets the request body as YAML

type Response

type Response struct {
	RawResponse *http.Response
	BodyBytes   []byte
	Context     context.Context
	Client      *Client
	// contains filtered or unexported fields
}

Response represents an HTTP response.

func NewResponse

func NewResponse(ctx context.Context, resp *http.Response, client *Client, stream StreamCallback, streamErr StreamErrCallback, streamDone StreamDoneCallback) (*Response, error)

NewResponse creates a new wrapped response object, leveraging the buffer pool for efficient memory usage.

func (*Response) Body

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

Body returns the response body as a byte slice.

func (*Response) Close

func (r *Response) Close() error

Close closes the response body.

func (*Response) ContentLength

func (r *Response) ContentLength() int

ContentLength returns the length of the response body.

func (*Response) ContentType

func (r *Response) ContentType() string

ContentType returns the value of the "Content-Type" header.

func (*Response) Cookies

func (r *Response) Cookies() []*http.Cookie

Cookies parses and returns the cookies set in the response.

func (*Response) Header

func (r *Response) Header() http.Header

Header returns the response headers.

func (*Response) IsContentType

func (r *Response) IsContentType(contentType string) bool

IsContentType Checks if the response Content-Type header matches a given content type.

func (*Response) IsEmpty

func (r *Response) IsEmpty() bool

IsEmpty checks if the response body is empty.

func (*Response) IsJSON

func (r *Response) IsJSON() bool

IsJSON checks if the response Content-Type indicates JSON.

func (*Response) IsSuccess

func (r *Response) IsSuccess() bool

IsSuccess checks if the response status code indicates success (200 - 299).

func (*Response) IsXML

func (r *Response) IsXML() bool

IsXML checks if the response Content-Type indicates XML.

func (*Response) IsYAML

func (r *Response) IsYAML() bool

IsYAML checks if the response Content-Type indicates YAML.

func (*Response) Location

func (r *Response) Location() (*url.URL, error)

Location returns the URL redirected address

func (*Response) Save

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

Save saves the response body to a file or io.Writer.

func (*Response) Scan

func (r *Response) Scan(v interface{}) error

Scan attempts to unmarshal the response body based on its content type.

func (*Response) ScanJSON

func (r *Response) ScanJSON(v interface{}) error

ScanJSON unmarshals the response body into a struct via JSON decoding.

func (*Response) ScanXML

func (r *Response) ScanXML(v interface{}) error

ScanXML unmarshals the response body into a struct via XML decoding.

func (*Response) ScanYAML

func (r *Response) ScanYAML(v interface{}) error

ScanYAML unmarshals the response body into a struct via YAML decoding.

func (*Response) Status

func (r *Response) Status() string

Status returns the status string of the response (e.g., "200 OK").

func (*Response) StatusCode

func (r *Response) StatusCode() int

StatusCode returns the HTTP status code of the response.

func (*Response) String

func (r *Response) String() string

String returns the response body as a string.

func (*Response) URL

func (r *Response) URL() *url.URL

URL returns the request URL that elicited the response.

type RetryConfig

type RetryConfig struct {
	MaxRetries int             // Maximum number of retry attempts
	Strategy   BackoffStrategy // The backoff strategy function
	RetryIf    RetryIfFunc     // Custom function to determine retry based on request and response
}

RetryConfig defines the configuration for retrying requests.

type RetryIfFunc

type RetryIfFunc func(req *http.Request, resp *http.Response, err error) bool

RetryIfFunc defines the function signature for retry conditions.

type StreamCallback added in v0.2.0

type StreamCallback func([]byte) error

StreamCallback is a callback function that is called when data is received.

type StreamDoneCallback added in v0.2.0

type StreamDoneCallback func()

StreamDoneCallback is a callback function that is called when the stream is done.

type StreamErrCallback added in v0.2.0

type StreamErrCallback func(error)

StreamErrCallback is a callback function that is called when an error occurs.

type XMLDecoder

type XMLDecoder struct {
	UnmarshalFunc func(data []byte, v any) error
}

XMLDecoder handles decoding of XML data.

func (*XMLDecoder) Decode

func (d *XMLDecoder) Decode(r io.Reader, v any) error

Decode reads the data from the reader and unmarshals it into the provided value.

type XMLEncoder

type XMLEncoder struct {
	MarshalFunc func(v any) ([]byte, error)
}

XMLEncoder handles encoding of XML data.

func (*XMLEncoder) ContentType

func (e *XMLEncoder) ContentType() string

ContentType returns the content type for XML data.

func (*XMLEncoder) Encode

func (e *XMLEncoder) Encode(v any) (io.Reader, error)

Encode marshals the provided value into XML format.

type YAMLDecoder

type YAMLDecoder struct {
	UnmarshalFunc func(data []byte, v any) error
}

YAMLDecoder handles decoding of YAML data.

func (*YAMLDecoder) Decode

func (d *YAMLDecoder) Decode(r io.Reader, v any) error

Decode reads the data from the reader and unmarshals it into the provided value.

type YAMLEncoder

type YAMLEncoder struct {
	MarshalFunc func(v any) ([]byte, error)
}

YAMLEncoder handles encoding of YAML data.

func (*YAMLEncoder) ContentType

func (e *YAMLEncoder) ContentType() string

ContentType returns the content type for YAML data.

func (*YAMLEncoder) Encode

func (e *YAMLEncoder) Encode(v any) (io.Reader, error)

Encode marshals the provided value into YAML format.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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