surf

package module
v1.0.45 Latest Latest
Warning

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

Go to latest
Published: Mar 20, 2024 License: MIT Imports: 39 Imported by: 4

README ¶

🤖👋 Surf: makes HTTP fun and easy!

Go Reference Go Report Card

Surf is a fun, user-friendly, and lightweight Go library that allows you to interact with HTTP services as if you were chatting with them face-to-face! 😄 Imagine if you could make HTTP requests by simply asking a server politely, and receiving responses as if you were having a delightful conversation with a friend. That's the essence of surf!

🌟 Features

  1. 💬 Simple and expressive: surf's API is designed to make your code look like a conversation, making it easier to read and understand.
  2. 💾 Caching and streaming: Efficiently cache response bodies and stream data on the fly, like a superhero saving the world from slow internet connections.
  3. 📉 Limit and deflate: Limit the amount of data you receive, and decompress it on the fly, giving you more control over your HTTP interactions.
  4. 🎩 Flexible: Customize headers, query parameters, timeouts, and more, for a truly tailor-made experience.

💻 Example

Here's a fun and friendly example of how surf makes HTTP requests look like a conversation:

package main

import (
	"fmt"
	"log"

	"github.com/enetx/surf"
)

func main() {
	resp, err := surf.NewClient().Get("https://api.example.com/jokes/random").Do() // A simple GET request
	if err != nil { log.Fatal(err) }

	joke := struct {
		ID     int    `json:"id"`
		Setup  string `json:"setup"`
		Punch  string `json:"punch"`
	}{}

	resp.Body.JSON(&joke)

	fmt.Println("Joke of the day:")
	fmt.Printf("%s\n%s\n", joke.Setup, joke.Punch)
}

🚀 Getting Started

To start making friends with HTTP services, follow these simple steps:

  1. Install the surf package using go get:
go get -u github.com/enetx/surf
  1. Import the package into your project:
import "github.com/enetx/surf"
  1. Start making requests and have fun! 😄

Give surf a try, and watch your HTTP conversations come to life!

Requires GOEXPERIMENT=rangefunc.

Documentation ¶

Index ¶

Constants ¶

This section is empty.

Variables ¶

This section is empty.

Functions ¶

This section is empty.

Types ¶

type Client ¶

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

Client struct provides a customizable HTTP client with configurable options for making requests, handling connections, and managing TLS settings.

func NewClient ¶

func NewClient() *Client

NewClient creates a new Client with default settings.

func (*Client) ClientMiddleware ¶

func (c *Client) ClientMiddleware(m clientMiddleware) *Client

ClientMiddleware add a client middleware.

func (*Client) CloseIdleConnections ¶

func (c *Client) CloseIdleConnections()

CloseIdleConnections removes all entries from the cached transports. Specifically used when Singleton is enabled for JA3 or Impersonate functionalities.

func (*Client) Delete ¶

func (c *Client) Delete(rawURL string, data ...any) *Request

Delete creates a new DELETE request.

func (*Client) FileUpload ¶

func (c *Client) FileUpload(rawURL, fieldName, filePath string, data ...any) *Request

FileUpload creates a new multipart file upload request.

func (*Client) Get ¶

func (c *Client) Get(rawURL string, data ...any) *Request

Get creates a new GET request.

func (*Client) GetClient ¶

func (c *Client) GetClient() *http.Client

GetClient returns http.Client used by the Client.

func (*Client) GetDialer ¶

func (c *Client) GetDialer() *net.Dialer

GetDialer returns the net.Dialer used by the Client.

func (*Client) GetTLSConfig ¶

func (c *Client) GetTLSConfig() *tls.Config

GetTLSConfig returns the tls.Config used by the Client.

func (*Client) GetTransport ¶

func (c *Client) GetTransport() http.RoundTripper

GetTransport returns the http.transport used by the Client.

func (*Client) Head ¶

func (c *Client) Head(rawURL string) *Request

Head creates a new HEAD request.

func (*Client) Multipart ¶

func (c *Client) Multipart(rawURL string, multipartValues map[string]string) *Request

Multipart creates a new multipart form data request.

func (*Client) Patch ¶

func (c *Client) Patch(rawURL string, data any) *Request

Patch creates a new PATCH request.

func (*Client) Post ¶

func (c *Client) Post(rawURL string, data any) *Request

Post creates a new POST request.

func (*Client) Put ¶

func (c *Client) Put(rawURL string, data any) *Request

Put creates a new PUT request.

func (*Client) Raw ¶

func (c *Client) Raw(raw, scheme string) *Request

Raw creates a new HTTP request using the provided raw data and scheme. The raw parameter should contain the raw HTTP request data as a string. The scheme parameter specifies the scheme (e.g., http, https) for the request.

func (*Client) RequestMiddleware ¶

func (c *Client) RequestMiddleware(m requestMiddleware) *Client

RequestMiddleware add a request middleware which hooks before request sent.

func (*Client) ResponseMiddleware ¶

func (c *Client) ResponseMiddleware(m responseMiddleware) *Client

ResponseMiddleware add a response middleware which hooks after response received.

func (*Client) SetOptions ¶

func (c *Client) SetOptions(opt *Options) *Client

SetOptions sets the provided options for the client and returns the updated client. It configures various settings like HTTP2, sessions, keep-alive, dial TLS, resolver, interface address, timeout, and redirect policy.

type Options ¶

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

func NewOptions ¶

func NewOptions() *Options

NewOptions creates a new Options instance with default values.

func (*Options) BasicAuth ¶

func (opt *Options) BasicAuth(authentication any) *Options

BasicAuth sets the basic authentication credentials for the client.

func (*Options) BearerAuth ¶

func (opt *Options) BearerAuth(authentication string) *Options

BearerAuth sets the bearer token for the client.

func (*Options) CacheBody ¶

func (opt *Options) CacheBody() *Options

CacheBody configures whether the client should cache the body of the response.

func (*Options) ContentType ¶

func (opt *Options) ContentType(contentType string) *Options

ContentType sets the content type for the client.

func (*Options) DNS ¶

func (opt *Options) DNS(dns string) *Options

DNS sets the custom DNS resolver address.

func (*Options) DNSOverTLS ¶

func (opt *Options) DNSOverTLS() *dnsOverTLS

DNSOverTLS configures the client to use DNS over TLS.

func (*Options) DisableCompression ¶

func (opt *Options) DisableCompression() *Options

DisableCompression disables compression for the HTTP client.

func (*Options) DisableKeepAlive ¶

func (opt *Options) DisableKeepAlive() *Options

DisableKeepAlive disable keep-alive connections.

func (*Options) FollowOnlyHostRedirects ¶

func (opt *Options) FollowOnlyHostRedirects() *Options

FollowOnlyHostRedirects configures whether the client should only follow redirects within the same host.

func (*Options) ForceHTTP1 ¶

func (opt *Options) ForceHTTP1() *Options

ForceHTTP1MW configures the client to use HTTP/1.1 forcefully.

func (*Options) ForwardHeadersOnRedirect ¶

func (opt *Options) ForwardHeadersOnRedirect() *Options

ForwardHeadersOnRedirect adds a middleware to the Options object that ensures HTTP headers are forwarded during a redirect.

func (*Options) GetRemoteAddress ¶

func (opt *Options) GetRemoteAddress() *Options

GetRemoteAddress configures whether the client should get the remote address.

func (*Options) H2C ¶

func (opt *Options) H2C() *Options

H2C configures the client to handle HTTP/2 Cleartext (h2c).

func (*Options) HTTP2Settings ¶

func (opt *Options) HTTP2Settings() *http2s

HTTP2Settings configures settings related to HTTP/2 and returns an http2s struct.

func (*Options) Impersonate ¶

func (opt *Options) Impersonate() *impersonate

Impersonate configures something related to impersonation and returns an impersonate struct.

func (*Options) InterfaceAddr ¶

func (opt *Options) InterfaceAddr(address string) *Options

InterfaceAddr sets the network interface address for the client.

func (*Options) JA3 ¶

func (opt *Options) JA3() *ja3

JA3 configures the client to use a specific TLS fingerprint.

func (*Options) MaxRedirects ¶

func (opt *Options) MaxRedirects(maxRedirects int) *Options

MaxRedirects sets the maximum number of redirects the client should follow.

func (*Options) NotFollowRedirects ¶

func (opt *Options) NotFollowRedirects() *Options

NotFollowRedirects disables following redirects for the client.

func (*Options) Proxy ¶

func (opt *Options) Proxy(proxy any) *Options

Proxy sets the proxy settings for the client.

func (*Options) RedirectPolicy ¶

func (opt *Options) RedirectPolicy(f func(*http.Request, []*http.Request) error) *Options

RedirectPolicy sets a custom redirect policy for the client.

func (*Options) Retry ¶

func (opt *Options) Retry(retryMax int, retryWait time.Duration, codes ...int) *Options

Retry configures the retry behavior of the client.

Parameters:

retryMax: Maximum number of retries to be attempted.
retryWait: Duration to wait between retries.
codes: Optional list of HTTP status codes that trigger retries.
       If no codes are provided, default codes will be used
       (500, 429, 503 - Internal Server Error, Too Many Requests, Service Unavailable).

func (*Options) Session ¶

func (opt *Options) Session() *Options

Session configures whether the client should maintain a session.

func (*Options) Singleton ¶

func (opt *Options) Singleton() *Options

Singleton configures the client to use a singleton instance, ensuring there's only one client instance. This is needed specifically for JA3 or Impersonate functionalities.

func (Options) String ¶

func (opt Options) String() string

String generate a string representation of the Options instance.

func (*Options) Timeout ¶

func (opt *Options) Timeout(timeout time.Duration) *Options

Timeout sets the timeout duration for the client.

func (*Options) UnixDomainSocket ¶

func (opt *Options) UnixDomainSocket(socketPath string) *Options

UnixDomainSocket sets the path for a Unix domain socket in the Options. This allows the HTTP client to connect to the server using a Unix domain socket instead of a traditional TCP/IP connection.

func (*Options) UserAgent ¶

func (opt *Options) UserAgent(userAgent any) *Options

UserAgent sets the user agent for the client.

type Request ¶

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

Request is a struct that holds information about an HTTP request.

func (*Request) AddCookies ¶

func (req *Request) AddCookies(cookies ...*http.Cookie) *Request

AddCookies adds cookies to the request.

func (*Request) AddHeaders ¶

func (req *Request) AddHeaders(headers any) *Request

AddHeaders adds headers to the request, appending to any existing headers with the same name.

func (*Request) Do ¶

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

Do performs the HTTP request and returns a Response object or an error if the request failed.

func (*Request) GetRequest ¶

func (req *Request) GetRequest() *http.Request

GetRequest returns the underlying http.Request of the custom request.

func (*Request) SetHeaders ¶

func (req *Request) SetHeaders(headers any) *Request

SetHeaders sets headers for the request, replacing existing ones with the same name.

func (*Request) WithContext ¶

func (req *Request) WithContext(ctx context.Context) *Request

WithContext associates the provided context with the request.

type Response ¶

type Response struct {
	*Client // Client is the associated client for the response.

	URL *url.URL // URL of the response.

	Body *body // Response body.

	Headers       headers       // Response headers.
	Status        string        // HTTP status string.
	UserAgent     string        // User agent string.
	Proto         string        // HTTP protocol version.
	Cookies       cookies       // Response cookies.
	Time          time.Duration // Total time taken for the response.
	ContentLength int64         // Length of the response content.
	StatusCode    int           // HTTP status code.
	Attempts      int           // Number of attempts made.
	// contains filtered or unexported fields
}

Response represents a custom response structure.

func (Response) Debug ¶

func (resp Response) Debug() *debug

Debug returns a debug instance associated with a Response.

func (Response) GetCookies ¶

func (resp Response) GetCookies(rawURL string) []*http.Cookie

GetCookies returns the cookies from the response for the given URL.

func (Response) GetResponse ¶

func (resp Response) GetResponse() *http.Response

GetResponse returns the underlying http.Response of the custom response.

func (Response) Referer ¶

func (resp Response) Referer() string

Referer returns the referer of the response.

func (Response) RemoteAddress ¶

func (resp Response) RemoteAddress() net.Addr

RemoteAddress returns the remote address of the response.

func (*Response) SetCookies ¶

func (resp *Response) SetCookies(rawURL string, cookies []*http.Cookie) error

SetCookies sets cookies for the given URL in the response.

func (Response) TLSGrabber ¶

func (resp Response) TLSGrabber() *tlsData

TLSGrabber returns a tlsData struct containing information about the TLS connection if it exists.

Directories ¶

Path Synopsis
internal
pkg

Jump to

Keyboard shortcuts

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