downbuff

package module
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Jul 31, 2024 License: MIT Imports: 20 Imported by: 0

README

downbuff

An easy-use raw HTTP request library

Go Report Card Go

Request page example

package main

import (
	"fmt"
	"time"
	"github.com/ANDRVV/downbuff"
)

func main() {
	headers := downbuff.Header{
		USER_AGENT:      "downbuff/1.0",
		ACCEPT:          "text/html",
		ACCEPT_LANGUAGE: "en-US,en;q=0.8",
		HOST:            "google.com",
	}

	baseRequest := downbuff.BodyRequest{Path: "/", HttpVersion: "1.1", Header: headers}

	conn := downbuff.Link("https://google.com", downbuff.SockConf{Buffer: 2048, Timeout: 3 * time.Second})
    defer conn.Quit()

	ok, response1 := conn.Req(downbuff.METHOD_GET, baseRequest)
	if !ok {
		fmt.Println("error:", conn.GetError().Error())
	}
	fmt.Println(response1.StatusCode == downbuff.CODE_200)

	baseRequest.Path = "/maps"
	ok, response2 := conn.Req(downbuff.METHOD_GET, baseRequest)
	if !ok {
		fmt.Println("error:", conn.GetError().Error())
	}
	fmt.Println(response2.StatusCode == downbuff.CODE_200)

	fmt.Println(response1.HttpVersion, response1.StatusCode, response1.StatusText) // print HTTP version, status code, status text
	fmt.Println(response1.Summary())                                               // print serialized known headers + unknown headers
	fmt.Println(response1.Data)                                                    // print body of response
	fmt.Println(response1.Header.CONTENT_ENCODING)                                 // print stuff

	// ... same for response2
}

Download content example

package main

import (
	"fmt"
	"github.com/ANDRVV/downbuff"
	"time"
)

func main() {
	headers := downbuff.Header{
		RANGE: "bytes=0-", // Setting range, show content-length (good for performance in sync downloading)
		HOST:  "esahubble.org",
	}

	baseRequest := downbuff.BodyRequest{Path: "/media/archives/images/publicationtiff40k/heic1502a.tif", HttpVersion: "1.1", Header: headers}

	conn := downbuff.Link("https://esahubble.org", downbuff.SockConf{Buffer: 2048}) // remove timeout param for download big data
	defer conn.Quit()

	conn.SetFile("spaceimage.tif") // enable sync downloading with chan (ContentLength, ContentDownloaded)

	go func() {
		var contentLength int64
		var startTime time.Time
		for {
			select {
			case cl := <-conn.ContentLength:
				contentLength = cl
				startTime = time.Now()
			case cd := <-conn.ContentDownloaded:
				downloadSpeed := float64(cd) / time.Since(startTime).Seconds() / 1e6
				remainingTime := time.Duration((((contentLength - cd) / 1e6) / int64(max(downloadSpeed, 1))) * int64(time.Second)).String()

				fmt.Printf("\rDownload progress: %.2f GB / %.2f GB (%.2f MB/s): %s remaining time...", float64(cd)/1e9, float64(contentLength)/1e9, downloadSpeed, remainingTime)
				if contentLength == cd {
					return
				}
			}
		}
	}()

	ok, response := conn.Req(downbuff.METHOD_GET, baseRequest)
	fmt.Println(response.StatusCode)
	if ok && response.StatusCode == downbuff.CODE_200 {
		fmt.Println("Downloaded successfully")
	}
}

Build Auth and Post

package main

import (
	"github.com/ANDRVV/downbuff"
)

func main() {
	// How to use Auth builder

	credBasic := downbuff.Basic{Username: "user", Password: "passwd"}

	// Algorithm param not needed but easily assignable (default is MD5)
	credDigest := downbuff.Digest{
		Method: downbuff.METHOD_GET, 
		Path: "/", 
		Username: "user", 
		Password: "passwd",
		Algorithm: downbuff.MD5,
	}

	_ = downbuff.Header{
		// Auth with "Basic"
		AUTHORIZATION: downbuff.BuildAuth(downbuff.BASIC, downbuff.AuthInfo{BasicScheme: credBasic}),
	}

	_ = downbuff.Header{
		// Auth with "Digest"
		AUTHORIZATION: downbuff.BuildAuth(downbuff.DIGEST, downbuff.AuthInfo{DigestScheme: credDigest}),
	}

	// How to build data for POST request

	baseRequest := downbuff.BodyRequest{Path: "/", HttpVersion: "1.1", Header: downbuff.Header{HOST: "example.com"},
		Data: downbuff.BuildPOST(map[string]string{"key1": "value1", "key2": "value2"}),
	}

	conn := downbuff.Link("https://example.com", downbuff.SockConf{})
	defer conn.Quit()

	conn.Req(downbuff.METHOD_POST, baseRequest)
	
	// some stuff here
}

[!NOTE] To add multiple or unknown headers use UnkHeader from downbuff.BodyRequest with map[string]string syntax.

Credits

Andrea Vaccaro


Docs and update soon🚀

Documentation

Index

Constants

View Source
const (
	// Authentication Scheme
	BASIC  AuthScheme = "Basic"
	DIGEST AuthScheme = "Digest"

	// Supported algorithms
	MD5     DigestAlgorithm = "MD5"
	MD5SESS DigestAlgorithm = "MD5-SESS"
	SHA     DigestAlgorithm = "SHA"
	SHA256  DigestAlgorithm = "SHA-256"
	SHA512  DigestAlgorithm = "SHA-512"
)
View Source
const (
	// Request method
	METHOD_GET     reqmethod = "GET"
	METHOD_PUT     reqmethod = "PUT"
	METHOD_POST    reqmethod = "POST"
	METHOD_DELETE  reqmethod = "DELETE"
	METHOD_PATCH   reqmethod = "PATCH"
	METHOD_HEAD    reqmethod = "HEAD"
	METHOD_OPTIONS reqmethod = "OPTIONS"
	METHOD_TRACE   reqmethod = "TRACE"
	METHOD_CONNECT reqmethod = "CONNECT"

	// Status codes
	CODE_100 status = 100
	CODE_101 status = 101
	CODE_102 status = 102
	CODE_103 status = 103
	CODE_122 status = 122
	CODE_200 status = 200
	CODE_201 status = 201
	CODE_202 status = 202
	CODE_203 status = 203
	CODE_204 status = 204
	CODE_205 status = 205
	CODE_206 status = 206
	CODE_207 status = 207
	CODE_208 status = 208
	CODE_226 status = 226
	CODE_300 status = 300
	CODE_301 status = 301
	CODE_302 status = 302
	CODE_303 status = 303
	CODE_304 status = 304
	CODE_305 status = 305
	CODE_306 status = 306
	CODE_307 status = 307
	CODE_308 status = 308
	CODE_400 status = 400
	CODE_401 status = 401
	CODE_402 status = 402
	CODE_403 status = 403
	CODE_404 status = 404
	CODE_405 status = 405
	CODE_406 status = 406
	CODE_407 status = 407
	CODE_408 status = 408
	CODE_409 status = 409
	CODE_410 status = 410
	CODE_411 status = 411
	CODE_412 status = 412
	CODE_413 status = 413
	CODE_414 status = 414
	CODE_415 status = 415
	CODE_416 status = 416
	CODE_417 status = 417
	CODE_418 status = 418
	CODE_421 status = 421
	CODE_422 status = 422
	CODE_423 status = 423
	CODE_424 status = 424
	CODE_425 status = 425
	CODE_426 status = 426
	CODE_428 status = 428
	CODE_429 status = 429
	CODE_431 status = 431
	CODE_444 status = 444
	CODE_449 status = 449
	CODE_450 status = 450
	CODE_451 status = 451
	CODE_499 status = 499
	CODE_500 status = 500
	CODE_501 status = 501
	CODE_502 status = 502
	CODE_503 status = 503
	CODE_504 status = 504
	CODE_505 status = 505
	CODE_506 status = 506
	CODE_507 status = 507
	CODE_509 status = 509
	CODE_510 status = 510
	CODE_511 status = 511
)
View Source
const (
	SOCKET_ERR              warnlog = "Unable to initialize socket"
	SENDREQ_ERR             warnlog = "Unable to send any request"
	RECVRESP_ERR            warnlog = "Unable to receive any response"
	INVALID_HTTPVERSION_ERR warnlog = "Invalid HTTP version"
	INVALID_METHOD_ERR      warnlog = "Invalid HTTP method"
	OVERFLOW_MEM_ERR        warnlog = "Data too large to store in memory: use file method"
	INVALID_URL_ERR         warnlog = "Invalid URL syntax"
	INVALID_SCHEME_ERR      warnlog = "Invalid scheme"
	ERASEFILE_ERR           warnlog = "Unable to erase file"
	INVALID_AUTHSCHEME_ERR  warnlog = "Invalid authentication scheme"
	PARAM_NEEDED_ERR        warnlog = "Needed parameter is missing"
	INVALID_HASH_ERR        warnlog = "Invalid hash algorithm"
)

Variables

This section is empty.

Functions

func BuildAuth

func BuildAuth(scheme AuthScheme, authInfo AuthInfo) (headerContent string)

Value for Authorization header

func BuildPOST

func BuildPOST(postdata map[string]string) (data []byte)

func BuildProxyAuth

func BuildProxyAuth(info Basic) string

Value for Proxy-Authorization header

func Link(url string, config SockConf) (linknode linkc)

func SerializeHeaders

func SerializeHeaders(method reqmethod, body BodyRequest) (serializedBody []byte)

Types

type AuthInfo

type AuthInfo struct {
	BasicScheme  Basic
	DigestScheme Digest
}

type AuthScheme

type AuthScheme string

type Basic

type Basic struct {
	Username, Password string
}

type BodyRequest

type BodyRequest struct {
	Path        string
	HttpVersion string // Available 1.0, 1.1, 2, 3
	Header      Header
	UnkHeaders  map[string]string
	Data        []byte
}

func (BodyRequest) Summary

func (response BodyRequest) Summary() (summary string)

type BodyResponse

type BodyResponse struct {
	HttpVersion string
	StatusCode  status
	StatusText  string
	Header      Header
	UnkHeaders  map[string]string
	Data        []byte
}

func (BodyResponse) Summary

func (response BodyResponse) Summary() (summary string)

type Digest

type Digest struct {
	Method reqmethod // needed
	Path   string    // default is "/"

	Username   string
	Password   string
	Realm      string
	Algorithm  DigestAlgorithm
	LastNonce  string
	Nonce      string
	NonceValue int
	Qop        string
	Opaque     string
}

type DigestAlgorithm

type DigestAlgorithm string
type Header struct {
	A_IM                                               string
	ACCEPT                                             string
	ACCEPT_CHARSET                                     string
	ACCEPT_DATETIME                                    string
	ACCEPT_ENCODING                                    string
	ACCEPT_LANGUAGE                                    string
	ACCESS_CONTROL_REQUEST_METHOD                      string
	ACCESS_CONTROL_REQUEST_HEADERS                     string
	AUTHORIZATION                                      string
	COOKIE                                             string
	EXPECT                                             string
	FORWARDED                                          string
	FROM                                               string
	HOST                                               string
	HTTP2_SETTINGS                                     string
	IF_MATCH                                           string
	IF_MODIFIED_SINCE                                  time.Time
	IF_NONE_MATCH                                      string
	IF_RANGE                                           string
	IF_UNMODIFIED_SINCE                                time.Time
	MAX_FORWARDS                                       int64
	ORIGIN                                             string
	PRAGMA                                             string
	PREFER                                             string
	PROXY_AUTHORIZATION                                string
	RANGE                                              string
	REFERER                                            string
	TE                                                 string
	TRAILER                                            string
	TRANSFER_ENCODING                                  string
	USER_AGENT                                         string
	UPGRADE                                            string
	VIA                                                string
	WARNING                                            string
	UPGRADE_INSECURE_REQUESTS                          string
	X_REQUESTED_WITH                                   string
	DNT                                                string
	X_FORWARDED_FOR                                    string
	X_FORWARDED_HOST                                   string
	X_FORWARDED_PROTO                                  string
	FRONT_END_HTTPS                                    string
	X_HTTP_METHOD_OVERRIDE                             string
	X_ATT_DEVICEID                                     string
	X_WAP_PROFILE                                      string
	PROXY_CONNECTION                                   string
	X_UIDH                                             string
	X_CSRF_TOKEN                                       string
	X_REQUEST_ID                                       string
	X_CORRELATION_ID                                   string
	SAVE_DATA                                          string
	SEC_GPC                                            string
	ACCEPT_CH                                          string
	ACCESS_CONTROL_ALLOW_ORIGIN                        string
	ACCESS_CONTROL_ALLOW_CREDENTIALS                   string
	ACCESS_CONTROL_EXPOSE_HEADERS                      string
	ACCESS_CONTROL_MAX_AGE                             string
	ACCESS_CONTROL_ALLOW_METHODS                       string
	ACCESS_CONTROL_ALLOW_HEADERS                       string
	ACCEPT_PATCH                                       string
	ACCEPT_RANGES                                      string
	AGE                                                int64
	ALLOW                                              string
	ALT_SVC                                            string
	CACHE_CONTROL                                      string
	CONNECTION                                         string
	CONTENT_DISPOSITION                                string
	CONTENT_ENCODING                                   string
	CONTENT_LANGUAGE                                   string
	CONTENT_LENGTH                                     int64
	CONTENT_LOCATION                                   string
	CONTENT_MD5                                        string
	CONTENT_RANGE                                      string
	CONTENT_TYPE                                       string
	DATE                                               time.Time
	DELTA_BASE                                         string
	ETAG                                               string
	EXPIRES                                            time.Time
	IM                                                 string
	LAST_MODIFIED                                      time.Time
	LINK                                               string
	LOCATION                                           string
	P3P                                                string
	PREFERENCE_APPLIED                                 string
	PROXY_AUTHENTICATE                                 string
	PUBLIC_KEY_PINS                                    string
	RETRY_AFTER                                        string
	SERVER                                             string
	SET_COOKIE                                         string
	STRICT_TRANSPORT_SECURITY                          string
	TK                                                 string
	VARY                                               string
	WWW_AUTHENTICATE                                   string
	X_FRAME_OPTIONS                                    string
	CONTENT_SECURITY_POLICY                            string
	EXPECT_CT                                          string
	NEL                                                string
	PERMISSIONS_POLICY                                 string
	REFRESH                                            string
	REPORT_TO                                          string
	STATUS                                             string
	TIMING_ALLOW_ORIGIN                                string
	X_CONTENT_DURATION                                 int64
	X_CONTENT_TYPE_OPTIONS                             string
	X_POWERED_BY                                       string
	X_REDIRECT_BY                                      string
	X_UA_COMPATIBLE                                    string
	X_TURBO_CHARGED_BY                                 string
	PRIORITY                                           string
	SEC_CH_UA                                          string
	SEC_CH_UA_ARCH                                     string
	SEC_CH_UA_BITNESS                                  string
	SEC_CH_UA_FULL_VERSION                             string
	SEC_CH_UA_FULL_VERSION_LIST                        string
	SEC_CH_UA_MOBILE                                   string
	SEC_CH_UA_MODEL                                    string
	SEC_CH_UA_PLATFORM                                 string
	SEC_CH_UA_PLATFORM_VERSION                         string
	SEC_CH_UA_WOW64                                    string
	SEC_FETCH_DEST                                     string
	SEC_FETCH_MODE                                     string
	SEC_FETCH_SITE                                     string
	SEC_FETCH_USER                                     string
	SEC_PURPOSE                                        string
	SEC_WEBSOCKET_ACCEPT                               string
	SEC_METADATA                                       string
	KEEP_ALIVE                                         string
	ACCEPT_POST                                        string
	ALT_USED                                           string
	ATTRIBUTION_REPORTING_ELIGIBLEEXPERIMENTAL         string
	ATTRIBUTION_REPORTING_REGISTER_SOURCEEXPERIMENTAL  string
	ATTRIBUTION_REPORTING_REGISTER_TRIGGEREXPERIMENTAL string
	CLEAR_SITE_DATA                                    string
	CONTENT_DIGESTEXPERIMENTAL                         string
	CONTENT_DPRNON_STANDARDDEPRECATED                  string
	CONTENT_SECURITY_POLICY_REPORT_ONLY                string
	CRITICAL_CHEXPERIMENTAL                            string
	CROSS_ORIGIN_EMBEDDER_POLICY                       string
	CROSS_ORIGIN_OPENER_POLICY                         string
	CROSS_ORIGIN_RESOURCE_POLICY                       string
	DEVICE_MEMORY                                      string
	DIGESTNON_STANDARDDEPRECATED                       string
	DNTNON_STANDARDDEPRECATED                          string
	DOWNLINKEXPERIMENTAL                               string
	DPRNON_STANDARDDEPRECATED                          string
	EARLY_DATAEXPERIMENTAL                             string
	ECTEXPERIMENTAL                                    string
	NELEXPERIMENTAL                                    string
	NO_VARY_SEARCHEXPERIMENTAL                         string
	OBSERVE_BROWSING_TOPICSEXPERIMENTALNON_STANDARD    string
	ORIGIN_AGENT_CLUSTEREXPERIMENTAL                   string
	PRAGMADEPRECATED                                   string
	REFERRER_POLICY                                    string
	REPORTING_ENDPOINTS                                string
	REPR_DIGESTEXPERIMENTAL                            string
	RTTEXPERIMENTAL                                    string
	SAVE_DATAEXPERIMENTAL                              string
	SEC_BROWSING_TOPICSEXPERIMENTALNON_STANDARD        string
	SEC_CH_PREFERS_COLOR_SCHEMEEXPERIMENTAL            string
	SEC_CH_PREFERS_REDUCED_MOTIONEXPERIMENTAL          string
	SEC_CH_PREFERS_REDUCED_TRANSPARENCYEXPERIMENTAL    string
	SEC_CH_UAEXPERIMENTAL                              string
	SEC_CH_UA_ARCHEXPERIMENTAL                         string
	SEC_CH_UA_BITNESSEXPERIMENTAL                      string
	SEC_CH_UA_FULL_VERSIONDEPRECATED                   string
	SEC_CH_UA_FULL_VERSION_LISTEXPERIMENTAL            string
	SEC_CH_UA_MOBILEEXPERIMENTAL                       string
	SEC_CH_UA_MODELEXPERIMENTAL                        string
	SEC_CH_UA_PLATFORMEXPERIMENTAL                     string
	SEC_CH_UA_PLATFORM_VERSIONEXPERIMENTAL             string
	SEC_GPCEXPERIMENTALNON_STANDARD                    string
	SERVER_TIMING                                      string
	SERVICE_WORKER_NAVIGATION_PRELOAD                  string
	SET_LOGINEXPERIMENTAL                              string
	SOURCEMAP                                          string
	SPECULATION_RULESEXPERIMENTAL                      string
	SUPPORTS_LOADING_MODEEXPERIMENTAL                  string
	TKNON_STANDARDDEPRECATED                           string
	VIEWPORT_WIDTHNON_STANDARDDEPRECATED               string
	WANT_CONTENT_DIGESTEXPERIMENTAL                    string
	WANT_DIGESTNON_STANDARDDEPRECATED                  string
	WANT_REPR_DIGESTEXPERIMENTAL                       string
	WARNINGDEPRECATED                                  string
	WIDTHNON_STANDARDDEPRECATED                        string
	X_DNS_PREFETCH_CONTROLNON_STANDARD                 string
	X_FORWARDED_FORNON_STANDARD                        string
	X_FORWARDED_HOSTNON_STANDARD                       string
	X_FORWARDED_PROTONON_STANDARD                      string
	X_XSS_PROTECTIONNON_STANDARD                       string
	X_CACHE                                            string
	X_SERVED_BY                                        string
	CF_CONNECTING_IP                                   string
	CF_IPCOUNTRY                                       string
	CF_RAY                                             string
	CF_VISITOR                                         string
	CF_WORKER                                          string
	CF_CACHE_STATUS                                    string
	CF_REQUEST_ID                                      string
	CF_REQUEST_CONTROL                                 string
	CF_TRACE_ID                                        string
	CF_PROXY_ID                                        string
	CF_BGJ                                             string
	CF_POP                                             string
	CF_CACHE_TAG                                       string
	CF_CLOUDFLARED                                     string
	CF_ACCESS_AUTHENTICATED_USER_EMAIL                 string
	CF_ACCESS_AUTHENTICATED_USER_IDENTITY_PROVIDER     string
	CF_ACCESS_JWT_ASSERTION                            string
	CF_EDGE_CDN_COUNTRY                                string
	CF_EDGE_CDN_CONTINENT                              string
	CF_EDGE_CDN_CITY                                   string
	CF_EDGE_CDN_REGION                                 string
	CF_EDGE_CDN_TIMEZONE                               string
	CF_EDGE_CDN_LATITUDE                               string
	CF_EDGE_CDN_LONGITUDE                              string
	CF_REQUEST_ACCEPTED_LANGUAGE                       string
	CF_REQUEST_REFERER                                 string
	CF_REQUEST_USER_AGENT                              string
	CF_REQUEST_SCHEME                                  string
}

type SockConf

type SockConf struct {
	Timeout time.Duration // Timeout
	Buffer  int           // Buffer chunk, default 2048
}

Jump to

Keyboard shortcuts

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