httputilmore

package
v0.66.5 Latest Latest
Warning

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

Go to latest
Published: Dec 25, 2024 License: MIT Imports: 24 Imported by: 117

Documentation

Index

Constants

View Source
const (
	DialTimeout int = 5
	TLSTimeout  int = 5
	HTTPTimeout int = 10
)
View Source
const (
	HeaderAccept                       = "Accept"
	HeaderAccessControlAllowHeaders    = "Access-Control-Allow-Headers"
	HeaderAccessControlAllowMethods    = "Access-Control-Allow-Methods"
	HeaderAccessControlAllowOrigin     = "Access-Control-Allow-Origin"
	HeaderAccessControlRequestHeaders  = "Access-Control-Request-Headers"
	HeaderAccessControlRequestMethod   = "Access-Control-Request-Method"
	HeaderAuthorization                = "Authorization"
	HeaderCacheControl                 = "Cache-Control"
	HeaderContentDisposition           = "Content-Disposition"
	HeaderContentEncoding              = "Content-Encoding"
	HeaderContentLanguage              = "Content-Language"
	HeaderContentLength                = "Content-Length"
	HeaderContentMD5                   = "Content-MD5"
	HeaderContentTransferEncoding      = "Content-Transfer-Encoding"
	HeaderContentType                  = "Content-Type"
	ContentTypeAppJSON                 = "application/json"
	ContentTypeAppJSONUtf8             = "application/json; charset=utf-8"
	ContentTypeAppOctetStream          = "application/octet-stream"
	ContentTypeAppFormURLEncoded       = "application/x-www-form-urlencoded"
	ContentTypeAppFormURLEncodedUtf8   = "application/x-www-form-urlencoded; charset=utf-8"
	ContentTypeAppXML                  = "application/xml"
	ContentTypeAppXMLUtf8              = "application/xml; charset=utf-8"
	ContentTypeImageGIF                = "image/gif"
	ContentTypeImageJPEG               = "image/jpeg"
	ContentTypeImagePNG                = "image/png"
	ContentTypeImageSVG                = "image/svg+xml"
	ContentTypeImageWebP               = "image/webp"
	ContentTypeMultipartFormData       = "multipart/form-data"
	ContentTypeTextCalendarUtf8Request = "text/calendar; charset=utf-8; method=REQUEST"
	ContentTypeTextHTML                = "text/html"
	ContentTypeTextHTMLUtf8            = "text/html; charset=utf-8"
	ContentTypeTextMarkdown            = "text/markdown"
	ContentTypeTextPlain               = "text/plain"
	ContentTypeTextPlainUsASCII        = "text/plain; charset=us-ascii"
	ContentTypeTextPlainUtf8           = "text/plain; charset=utf-8"
	ContentTypeTextXMLUtf8             = "text/xml; charset=utf-8"
	HeaderDate                         = "Date"
	HeaderExpect                       = "Expect"
	Expect100Continue                  = "100-continue"
	HeaderIfMatch                      = "If-Match"
	HeaderIfModifiedSince              = "If-Modified-Since"
	HeaderIfNoneMatch                  = "If-None-Match"
	HeaderIfUnmodifiedSince            = "If-Unmodified-Since"
	HeaderLocation                     = "Location"
	HeaderPrefer                       = "Prefer" // IETF RFC-7240
	PreferHandlingStrict               = "handling=strict"
	PreferRespondAsync                 = "respond-async"
	PreferReturnMinimal                = "return=minimal"
	PreferReturnRepresentation         = "return=representation"
	HeaderRange                        = "Range"
	HeaderUserAgent                    = "User-Agent"
	HeaderWWWAuthenticate              = "WWW-Authenticate"
	WWWAuthenticateBasicRestricted     = "Basic realm=Restricted"
	HeaderXContentTypeOptions          = "X-Content-Type-Options"

	SchemeHTTPS = "https"

	HeaderNgrokSkipBrowserWarning      = "ngrok-skip-browser-warning" // header needs to be present. value can be anything. See more at: https://stackoverflow.com/questions/73017353/how-to-bypass-ngrok-browser-warning
	HeaderNgrokSkipBrowserWarningValue = "skip-browser-warning"
)

Constants ensuring that header names are correctly spelled and consistently cased.

View Source
const (
	MethodConnect HTTPMethod = http.MethodConnect
	MethodDelete             = http.MethodDelete
	MethodGet                = http.MethodGet
	MethodHead               = http.MethodHead
	MethodOptions            = http.MethodOptions
	MethodPatch              = http.MethodPatch
	MethodPost               = http.MethodPost
	MethodPut                = http.MethodPut
	MethodTrace              = http.MethodTrace
)

Variables

View Source
var (
	ErrHTTPResponseCannotBeNil = errors.New("Error: '*http.Response' cannot be nil. Expected a non-nil value.")
)
View Source
var ErrStatus404 = errors.New("Status " + strconv.Itoa(http.StatusNotFound) + " " + http.StatusText(http.StatusNotFound))

Functions

func CondenseResponseNot2xxToError

func CondenseResponseNot2xxToError(resp *http.Response, err error, msg string) error

func CreateProxyRequest added in v0.63.11

func CreateProxyRequest(m map[string]string, r *http.Request) (*httputil.ProxyRequest, error)

CreateProxyRequest creates a proxy request given a mapping "POST /path" => "POST https://newurl"

func Delete

func Delete(client *http.Client, url string) (*http.Response, error)

Delete calls the HTTP `DELETE` method on a given URL.

func DoJSON

func DoJSON(client *http.Client, httpMethod, reqURL string, headers map[string][]string, reqBody, resBody any) ([]byte, *http.Response, error)

func DoJSONSimple

func DoJSONSimple(client *http.Client, httpMethod, requrl string, headers map[string][]string, body []byte) (*http.Response, error)

func DoRequestRateLimited

func DoRequestRateLimited(client *http.Client, req *http.Request, useXrlHyphen bool, fnLog FnLogRateLimitInfo) (*http.Response, error)

DoRequestRateLimited will pause a request for the time specified in the HTTP response headers.

func GetJSONSimple

func GetJSONSimple(requrl string, header http.Header, data any) (*http.Response, error)

func GetReqQueryParam

func GetReqQueryParam(req *http.Request, paramName string) string

func GetReqQueryParamSplit

func GetReqQueryParamSplit(req *http.Request, paramName, sep string) []string

func GetRequestRateLimited

func GetRequestRateLimited(client *http.Client, reqURL string, useXrlHyphen bool, fn FnLogRateLimitInfo) (*http.Response, error)

func GetResponseAndBytes

func GetResponseAndBytes(url string) (*http.Response, []byte, error)

GetResponseAndBytes retreives a URL and returns the response body as a byte array in addition to the *http.Response.

func GetURLOrReadFile

func GetURLOrReadFile(input string) ([]byte, error)

GetURLOrReadFile takes a string and will either call HTTP GET if the string begins with `http` or `https` URI scheme or read a file if it does not.

func GetWriteFile

func GetWriteFile(client *http.Client, url, filename string) (*http.Response, error)

GetWriteFile gets the conents of a URL and stores the body in the desired filename location.

func GetWriteFileSimple

func GetWriteFileSimple(url string, filename string, perm os.FileMode) ([]byte, error)

GetWriteFile performs a HTTP GET request and saves the response body to the file path specified. It reeads the entire file into memory which is not ideal for large files.

func HeaderMerge

func HeaderMerge(headers ...http.Header) http.Header

HeaderMerge combines data from multiple `http.Header` structs.

func HeaderString

func HeaderString(h http.Header) (string, error)

HeaderString converts a `http.Header` to a string.

func ListenAndServeTimeouts added in v0.64.9

func ListenAndServeTimeouts(addr string, handler http.Handler, timeout time.Duration) error

func Log

func Log(handler http.Handler) http.Handler

Log is a custom Http handler that will log all requests. It can be called using http.ListenAndServe(":8080", Log(http.DefaultServeMux)) From: https://groups.google.com/forum/#!topic/golang-nuts/s7Xk1q0LSU0

func LogRequestRateLimited

func LogRequestRateLimited(rlstat RateLimitInfo)

func MergeHeader

func MergeHeader(base, more http.Header, overwrite bool) http.Header

MergeHeader merges two http.Header adding the values of the second to the first.

func Methods added in v0.62.3

func Methods() []string

func MethodsMap

func MethodsMap() map[string]int

func NewHTTPClient

func NewHTTPClient() *http.Client

NewHTTPClient is a HTTP client provides default and updatable timeouts. The default Go HTTP client never times out. More at: https://medium.com/@nate510/don-t-use-go-s-default-http-client-4804cb19f779#.ymd655pgz

func NewHeadersMSS

func NewHeadersMSS(headersMap map[string]string) http.Header

NewHeadersMSS returns a `http.Header` struct give a `map[string]string`

func NewServerTimeouts added in v0.59.0

func NewServerTimeouts(addr string, handler http.Handler, timeout time.Duration) *http.Server

NewServerTimeouts returns a `*http.Server` with all timeouts set to a single value provided.

func ParseHTTPMethodString

func ParseHTTPMethodString(method string) (string, error)

ParseHTTPMethodString returns a HTTPMethod as a string for a string.

func ParseHeader

func ParseHeader(s string) http.Header

ParseHeader converts a raw strign to a header struct.

func ParseMultipartFormDataBoundaryFromHeader

func ParseMultipartFormDataBoundaryFromHeader(contentType string) string

func ParseRequestMethodPath added in v0.63.11

func ParseRequestMethodPath(r *http.Request) string

func PrintRequestOut

func PrintRequestOut(req *http.Request, includeBody bool) error

PrintRequestOut prints a http.Request using `httputil.DumpRequestOut`.

func PrintResponse

func PrintResponse(resp *http.Response, includeBody bool) error

PrintResponse prints a http.Response using `httputil.DumpResponse`.

func ProxyResponse

func ProxyResponse(w http.ResponseWriter, resp *http.Response) ([]byte, error)

ProxyResponse copies the information from a `*http.Response` to a `http.ResponseWriter`.

func RequestURLParam added in v0.51.0

func RequestURLParam(r *http.Request, key string) string

RequestURLParam returns the result of `url.Values.Get()` given an `*http.Response`. An empty string is returned if `*http.Request` or `*url.URL` are `nil`.

func ResponseBodyJSONMapIndent

func ResponseBodyJSONMapIndent(res *http.Response, prefix string, indent string) ([]byte, error)

ResponseBodyJSONMapIndent returns the body as a generic JSON dictionary

func ResponseIsContentType added in v0.64.0

func ResponseIsContentType(ct string, r *http.Response) bool

func ResponseWriterWriteJSON

func ResponseWriterWriteJSON(w http.ResponseWriter, statusCode int, body any, prefix, indent string) error

func SendWWWFormURLEncodedSimple

func SendWWWFormURLEncodedSimple(method, urlStr string, data url.Values) (*http.Response, error)

func TransportTLSVersions added in v0.64.1

func TransportTLSVersions(tr *http.Transport) (tlsutil.TLSVersion, tlsutil.TLSVersion, error)

Types

type ClientMore

type ClientMore struct {
	Client *http.Client
}

func (*ClientMore) PostToJSON

func (cm *ClientMore) PostToJSON(postURL string, body any) (*http.Response, error)

type Endpoint added in v0.63.11

type Endpoint struct {
	Method HTTPMethod
	URL    *url.URL
}

func ParseEndpoint added in v0.63.11

func ParseEndpoint(s string) (*Endpoint, error)

ParseEndpoint returns an `Endpoint` upon parsing a string like "POST https://example.com". If no method is provided, `GET` is returned. If the string has more than two fields, the lsat field is ignored.

func ParseRequestEndpoint added in v0.63.11

func ParseRequestEndpoint(r *http.Request) *Endpoint

type FnLogRateLimitInfo

type FnLogRateLimitInfo func(RateLimitInfo)

type HTTPError

type HTTPError struct {
	HTTPStatus int    `json:"httpStatus"`
	Stage      string `json:"preOpPost"`
	Message    string `json:"errorMessage"`
}

func NewHTTPError

func NewHTTPError(message string, httpStatus int, stage string) *HTTPError

func (*HTTPError) Bytes

func (httperr *HTTPError) Bytes() []byte

type HTTPMethod

type HTTPMethod string

func ParseHTTPMethod

func ParseHTTPMethod(method string) (HTTPMethod, error)

ParseHTTPMethod returns a HTTPMethod type for a string.

type RateLimitInfo

type RateLimitInfo struct {
	StatusCode          int
	RetryAfter          int
	XRateLimitLimit     int
	XRateLimitRemaining int
	XRateLimitReset     int
	XRateLimitWindow    int
}

RateLimitInfo is a structure for holding parsed rate limit info. It uses headers from the GitHub, RingCentral and Twitter APIs.

func NewResponseRateLimitInfo

func NewResponseRateLimitInfo(resp *http.Response, useXrlHyphen bool) RateLimitInfo

NewResponseRateLimitInfo returns a RateLimitInfo from a http.Response.

type ResponseInfo

type ResponseInfo struct {
	Name       string            `json:"name,omitempty"` // to distinguish from other requests
	Method     string            `json:"method,omitempty"`
	URL        string            `json:"url,omitempty"`
	StatusCode int               `json:"statusCode,omitempty"`
	Time       time.Time         `json:"time,omitempty"`
	Headers    map[string]string `json:"headers,omitempty"`
	Body       string            `json:"body,omitempty"`
}

ResponseInfo is a generic struct to handle response info.

func (*ResponseInfo) ToJSON

func (resIn *ResponseInfo) ToJSON() []byte

ToJSON returns ResponseInfo as a JSON byte array, embedding json.Marshal errors if encountered.

type TransportRequestModifier

type TransportRequestModifier struct {
	Transport http.RoundTripper
	Header    http.Header
	Query     url.Values
	Override  bool
}

TransportRequestModifier implements http.RoundTripper. When set as Transport of http.Client, it adds HTTP headers and or query string parameters to requests. No field is mandatory. Can be implemented with http.Client as: client.Transport = httputilmore.TransportRequestModifier{ Transport:client.Transport, Header:myHeader}

func (TransportRequestModifier) RoundTrip

func (t TransportRequestModifier) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip adds the additional headers per request implements http.RoundTripper.

Jump to

Keyboard shortcuts

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