gorequests

package module
v0.33.0 Latest Latest
Warning

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

Go to latest
Published: Apr 26, 2022 License: Apache-2.0 Imports: 18 Imported by: 11

README

gorequests

codecov go report card test status Apache-2.0 license Go.Dev reference Go project version

Simple and easy-to-use go http client, supports cookies, streaming calls, custom logs and other functions

Install

go get github.com/chyroc/gorequests

Usage

Simple Send Request
func main() {
	text, err := gorequests.New(http.MethodGet, "https://jsonplaceholder.typicode.com/todos/1").Text()
	if err != nil {
		panic(err)
	}
	fmt.Println("text", text)
}
func main() {
	session := gorequests.NewSession("/tmp/gorequests-session.txt")
	text, err := session.New(http.MethodGet, "https://jsonplaceholder.typicode.com/todos/1").Text()
	if err != nil {
		panic(err)
	}
	fmt.Println("text", text)
}
Request Factory
func main() {
    fac := gorequests.NewFactory(
        gorequests.WithLogger(gorequests.NewDiscardLogger()),
    )
	text, err := fac.New(http.MethodGet, "https://jsonplaceholder.typicode.com/todos/1").Text()
	if err != nil {
		panic(err)
	}
	fmt.Println("text", text)
}

Documentation

Overview

Package gorequests send http request with human style.

for send GET request:

gorequests.New(http.MethodGet, "https://httpbin.org/get")

for send POST request:

gorequests.New(http.MethodPost, "https://httpbin.org/post).WithBody("text body")

for send http upload request

gorequests.New(http.MethodPost, "https://httpbin.org/post).WithFile("1.txt", strings.NewReader("hi"), "file", nil)

for send json request

gorequests.New(http.MethodPost, "https://httpbin.org/post).WithJSON(map[string]string{"key": "val"})

request with timeout

gorequests.New(http.MethodGet, "https://httpbin.org/get).WithTimeout(time.Second)

request with context

gorequests.New(http.MethodGet, "https://httpbin.org/get).WithContext(context.TODO())

request with no redirect

gorequests.New(http.MethodGet, "https://httpbin.org/status/302).WithRedirect(false)
Example (Factory)
package main

import (
	"fmt"
	"net/http"
	"time"

	"github.com/chyroc/gorequests"
)

func main() {
	// I hope to set fixed parameters every time I initiate a request

	// Then, every request created by this factory will not log
	fac := gorequests.NewFactory(
		gorequests.WithLogger(gorequests.NewDiscardLogger()),
		gorequests.WithTimeout(time.Second*10),
	)

	// Send sample request
	text, err := fac.New(http.MethodGet, "https://httpbin.org/get").Text()
	if err != nil {
		panic(err)
	}
	fmt.Println("text", text)
}
Output:

Example (New)
package main

import (
	"fmt"
	"net/http"
	"time"

	"github.com/chyroc/gorequests"
)

func main() {
	text, err := gorequests.New(http.MethodGet, "https://httpbin.org/get").WithTimeout(time.Second * 10).Text()
	if err != nil {
		panic(err)
	}
	fmt.Println("text", text)
}
Output:

Example (NewSession)
package main

import (
	"fmt"
	"net/http"
	"time"

	"github.com/chyroc/gorequests"
)

func main() {
	session := gorequests.NewSession("/tmp/gorequests-session.txt")
	text, err := session.New(http.MethodGet, "https://jsonplaceholder.typicode.com/todos/1").WithTimeout(time.Second * 10).Text()
	if err != nil {
		panic(err)
	}
	fmt.Println("text", text)
}
Output:

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Factory added in v0.27.0

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

func NewFactory added in v0.27.0

func NewFactory(options ...RequestOption) *Factory

func (*Factory) New added in v0.27.0

func (r *Factory) New(method, url string) *Request

type Logger added in v0.10.0

type Logger interface {
	Info(ctx context.Context, format string, v ...interface{})
	Error(ctx context.Context, format string, v ...interface{})
}

func NewDiscardLogger added in v0.24.0

func NewDiscardLogger() Logger

func NewStdoutLogger added in v0.24.0

func NewStdoutLogger() Logger

type Request

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

func New

func New(method, url string) *Request

func (*Request) Bytes

func (r *Request) Bytes() ([]byte, error)

func (*Request) Context added in v0.10.0

func (r *Request) Context() context.Context

Context request context.Context

func (*Request) Map

func (r *Request) Map() (map[string]interface{}, error)

func (*Request) Method

func (r *Request) Method() string

Method request method

func (*Request) MustBytes added in v0.19.0

func (r *Request) MustBytes() []byte

func (*Request) MustMap added in v0.19.0

func (r *Request) MustMap() map[string]interface{}

func (*Request) MustResponse added in v0.19.0

func (r *Request) MustResponse() *http.Response

func (*Request) MustResponseCookiesByKey added in v0.32.0

func (r *Request) MustResponseCookiesByKey(key string) []string

func (*Request) MustResponseHeaderByKey added in v0.20.0

func (r *Request) MustResponseHeaderByKey(key string) string

func (*Request) MustResponseHeaders added in v0.19.0

func (r *Request) MustResponseHeaders() http.Header

func (*Request) MustResponseHeadersByKey added in v0.20.0

func (r *Request) MustResponseHeadersByKey(key string) []string

func (*Request) MustResponseStatus added in v0.19.0

func (r *Request) MustResponseStatus() int

func (*Request) MustText added in v0.19.0

func (r *Request) MustText() string

func (*Request) MustUnmarshal added in v0.19.0

func (r *Request) MustUnmarshal(val interface{})

func (*Request) RequestFullURL added in v0.19.0

func (r *Request) RequestFullURL() string

RequestFullURL request full url, contain query param

func (*Request) RequestHeader added in v0.19.0

func (r *Request) RequestHeader() http.Header

RequestHeader request header

func (*Request) Response added in v0.5.0

func (r *Request) Response() (*http.Response, error)

func (*Request) ResponseHeaderByKey added in v0.20.0

func (r *Request) ResponseHeaderByKey(key string) (string, error)

func (*Request) ResponseHeaders added in v0.19.0

func (r *Request) ResponseHeaders() (http.Header, error)

func (*Request) ResponseHeadersByKey added in v0.20.0

func (r *Request) ResponseHeadersByKey(key string) ([]string, error)

func (*Request) ResponseStatus added in v0.5.0

func (r *Request) ResponseStatus() (int, error)

func (*Request) SetError added in v0.6.0

func (r *Request) SetError(err error) *Request

func (*Request) Text

func (r *Request) Text() (string, error)

func (*Request) Timeout

func (r *Request) Timeout() time.Duration

Timeout request timeout

func (*Request) URL

func (r *Request) URL() string

URL request url

func (*Request) Unmarshal

func (r *Request) Unmarshal(val interface{}) error

func (*Request) WithBody

func (r *Request) WithBody(body interface{}) *Request

WithBody set request body, support: io.Reader, []byte, string, interface{}(as json format)

func (*Request) WithContext added in v0.19.0

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

WithContext setup request context.Context

func (*Request) WithFile added in v0.18.0

func (r *Request) WithFile(filename string, file io.Reader, fileKey string, params map[string]string) *Request

WithFile set file to body and set some multi-form k-v map

func (*Request) WithForm added in v0.10.0

func (r *Request) WithForm(body map[string]string) *Request

WithForm set body and set Content-Type to multiform

func (*Request) WithFormURLEncoded added in v0.25.0

func (r *Request) WithFormURLEncoded(body map[string]string) *Request

WithFormURLEncoded set body and set Content-Type to application/x-www-form-urlencoded

func (*Request) WithHeader

func (r *Request) WithHeader(k, v string) *Request

WithHeader set one header k-v map

func (*Request) WithHeaders

func (r *Request) WithHeaders(kv map[string]string) *Request

WithHeaders set multi header k-v map

func (*Request) WithIgnoreSSL added in v0.17.0

func (r *Request) WithIgnoreSSL(ignore bool) *Request

WithIgnoreSSL ignore ssl verify

func (*Request) WithJSON added in v0.16.0

func (r *Request) WithJSON(body interface{}) *Request

WithJSON set body same as WithBody, and set Content-Type to application/json

func (*Request) WithLogger added in v0.21.0

func (r *Request) WithLogger(logger Logger) *Request

WithLogger set logger

func (*Request) WithQuery added in v0.9.0

func (r *Request) WithQuery(k, v string) *Request

WithQuery set one query k-v map

func (*Request) WithQueryStruct added in v0.15.0

func (r *Request) WithQueryStruct(v interface{}) *Request

WithQueryStruct set multi query k-v map

func (*Request) WithQuerys added in v0.9.0

func (r *Request) WithQuerys(kv map[string]string) *Request

WithQuerys set multi query k-v map

func (*Request) WithRedirect added in v0.8.0

func (r *Request) WithRedirect(b bool) *Request

WithRedirect set allow or not-allow redirect with Location header

func (*Request) WithTimeout added in v0.19.0

func (r *Request) WithTimeout(timeout time.Duration) *Request

WithTimeout setup request timeout

func (*Request) WithURLCookie added in v0.16.0

func (r *Request) WithURLCookie(uri string) *Request

WithURLCookie set cookie of uri

func (*Request) WithWrapRoundTripperResponse added in v0.33.0

func (r *Request) WithWrapRoundTripperResponse(f func(resp *http.Response) (*http.Response, error)) *Request

WithWrapRoundTripperResponse set round tripper response wrap

type RequestOption added in v0.27.0

type RequestOption func(req *Request) error

func WithHeader added in v0.28.0

func WithHeader(key, val string) RequestOption

func WithLogger added in v0.27.0

func WithLogger(logger Logger) RequestOption

func WithQuery added in v0.28.0

func WithQuery(key, val string) RequestOption

func WithTimeout added in v0.27.0

func WithTimeout(timeout time.Duration) RequestOption

type Session

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

func NewSession

func NewSession(cookiefile string, options ...RequestOption) *Session

same cookie-file has same session instance

func (*Session) CookieFile added in v0.12.0

func (r *Session) CookieFile() string

func (*Session) Jar added in v0.14.0

func (r *Session) Jar() http.CookieJar

func (*Session) New

func (r *Session) New(method, url string) *Request

Jump to

Keyboard shortcuts

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