HttpRequest

package module
v2.0.3+incompatible Latest Latest
Warning

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

Go to latest
Published: Feb 2, 2021 License: Apache-2.0 Imports: 17 Imported by: 0

README

HttpRequest

A simple HTTP Request package for golang. GET POST DELETE PUT Upload

Installation

go get github.com/kirinlabs/HttpRequest

How do we use HttpRequest?
Create request object use http.DefaultTransport
req := HttpRequest.NewRequest()
req := HttpRequest.NewRequest().Debug(true).SetTimeout(5)
Set headers
req.SetHeaders(map[string]string{
    "Content-Type": "application/x-www-form-urlencoded",
    "Connection": "keep-alive",
})

req.SetHeaders(map[string]string{
    "Source":"api",
})
Set cookies
req.SetCookies(map[string]string{
    "name":"json",
    "token":"",
})

req.SetCookies(map[string]string{
    "age":"19",
})
Set basic auth
req.SetBasicAuth("username","password")
Set timeout
req.SetTimeout(5)  //default 30s
Transport

If you want to customize the Client object and reuse TCP connections, you need to define a global http.RoundTripper or & http.Transport, because the reuse of the http connection pool is based on Transport.

var transport *http.Transport
func init() {   
    transport = &http.Transport{
        DialContext: (&net.Dialer{
            Timeout:   30 * time.Second,
            KeepAlive: 30 * time.Second,
            DualStack: true,
        }).DialContext,
        MaxIdleConns:          100, 
        IdleConnTimeout:       90 * time.Second,
        TLSHandshakeTimeout:   5 * time.Second,
        ExpectContinueTimeout: 1 * time.Second,
    }
}

func demo(){
    // Use http.DefaultTransport
    res, err := HttpRequest.Get("http://127.0.0.1:8080")
    // Use custom Transport
    res, err := HttpRequest.Transport(transport).Get("http://127.0.0.1:8080")
}
Keep Alives,Only effective for custom Transport
req.DisableKeepAlives(false)

HttpRequest.Transport(transport).DisableKeepAlives(false).Get("http://127.0.0.1:8080")
Ignore Https certificate validation,Only effective for custom Transport
req.SetTLSClient(&tls.Config{InsecureSkipVerify: true})

HttpRequest.Transport(transport).SetTLSClient(&tls.Config{InsecureSkipVerify: true}).Get("http://127.0.0.1:8080")
Object-oriented operation mode
req := HttpRequest.NewRequest().
	Debug(true).
	SetHeaders(map[string]string{
	    "Content-Type": "application/x-www-form-urlencoded",
	}).SetTimeout(5)
resp,err := req.Get("http://127.0.0.1")

resp,err := HttpRequest.NewRequest().Get("http://127.0.0.1")
GET
Query parameter
resp, err := req.Get("http://127.0.0.1:8000")
resp, err := req.Get("http://127.0.0.1:8000",nil)
resp, err := req.Get("http://127.0.0.1:8000?id=10&title=HttpRequest")
resp, err := req.Get("http://127.0.0.1:8000?id=10&title=HttpRequest","address=beijing")

resp, err := HttpRequest.Get("http://127.0.0.1:8000")
resp, err := HttpRequest.Debug(true).SetHeaders(map[string]string{}).Get("http://127.0.0.1:8000")
Multi parameter
resp, err := req.Get("http://127.0.0.1:8000?id=10&title=HttpRequest",map[string]interface{}{
    "name":  "jason",
    "score": 100,
})
defer resp.Close()

body, err := resp.Body()
if err != nil {
    return
}

return string(body)
POST
// Send nil
resp, err := HttpRequest.Post("http://127.0.0.1:8000")

// Send integer
resp, err := HttpRequest.Post("http://127.0.0.1:8000", 100)

// Send []byte
resp, err := HttpRequest.Post("http://127.0.0.1:8000", []byte("bytes data"))

// Send io.Reader
resp, err := HttpRequest.Post("http://127.0.0.1:8000", bytes.NewReader(buf []byte))
resp, err := HttpRequest.Post("http://127.0.0.1:8000", strings.NewReader("string data"))
resp, err := HttpRequest.Post("http://127.0.0.1:8000", bytes.NewBuffer(buf []byte))

// Send string
resp, err := HttpRequest.Post("http://127.0.0.1:8000", "title=github&type=1")

// Send JSON
resp, err := HttpRequest.JSON().Post("http://127.0.0.1:8000", "{\"id\":10,\"title\":\"HttpRequest\"}")

// Send map[string]interface{}{}
resp, err := req.Post("http://127.0.0.1:8000", map[string]interface{}{
    "id":    10,
    "title": "HttpRequest",
})
defer resp.Close()

body, err := resp.Body()
if err != nil {
    return
}
return string(body)

resp, err := HttpRequest.Post("http://127.0.0.1:8000")
resp, err := HttpRequest.JSON().Post("http://127.0.0.1:8000",map[string]interface{}{"title":"github"})
resp, err := HttpRequest.Debug(true).SetHeaders(map[string]string{}).JSON().Post("http://127.0.0.1:8000","{\"title\":\"github\"}")
Jar
j, _ := cookiejar.New(nil)
j.SetCookies(&url.URL{
	Scheme: "http",
	Host:   "127.0.0.1:8000",
}, []*http.Cookie{
	&http.Cookie{Name: "identity-user", Value: "83df5154d0ed31d166f5c54ddc"},
	&http.Cookie{Name: "token_id", Value: "JSb99d0e7d809610186813583b4f802a37b99d"},
})
resp, err := HttpRequest.Jar(j).Get("http://127.0.0.1:8000/city/list")
defer resp.Close()

if err != nil {
	log.Fatalf("Request error:%v", err.Error())
}
Proxy
proxy, err := url.Parse("http://proxyip:proxyport")
if err != nil {
	log.Println(err)
}

resp, err := HttpRequest.Proxy(http.ProxyURL(proxy)).Get("http://127.0.0.1:8000/ip")
defer resp.Close()

if err != nil {
	log.Println("Request error:%v", err.Error())
}

body, err := resp.Body()
if err != nil {
	log.Println("Get body error:%v", err.Error())
}
log.Println(string(body))
Upload

Params: url, filename, fileinput

resp, err := req.Upload("http://127.0.0.1:8000/upload", "/root/demo.txt","uploadFile")
body, err := resp.Body()
defer resp.Close()
if err != nil {
    return
}
return string(body)
Debug
Default false
req.Debug(true)
Print in standard output:
[HttpRequest]
-------------------------------------------------------------------
Request: GET http://127.0.0.1:8000?name=iceview&age=19&score=100
Headers: map[Content-Type:application/x-www-form-urlencoded]
Cookies: map[]
Timeout: 30s
ReqBody: map[age:19 score:100]
-------------------------------------------------------------------

Json

Post JSON request

Set header
 req.SetHeaders(map[string]string{"Content-Type": "application/json"})

Or

req.JSON().Post("http://127.0.0.1:8000", map[string]interface{}{
    "id":    10,
    "title": "github",
})

req.JSON().Post("http://127.0.0.1:8000", "{\"title\":\"github\",\"id\":10}")
Post request
resp, err := req.Post("http://127.0.0.1:8000", map[string]interface{}{
    "id":    10,
    "title": "HttpRequest",
})
Print formatted JSON
str, err := resp.Export()
if err != nil {
   return
}
Unmarshal JSON
var u User
err := resp.Json(&u)
if err != nil {
   return err
}

var m map[string]interface{}
err := resp.Json(&m)
if err != nil {
   return err
}
Response
Response() *http.Response
resp, err := req.Post("http://127.0.0.1:8000/") //res is a http.Response object
StatusCode() int
resp.StatusCode()
Body() ([]byte, error)
body, err := resp.Body()
log.Println(string(body))
Close() error
resp.Close()
Time() string
resp.Time()  //ms
Print formatted JSON
str, err := resp.Export()
if err != nil {
   return
}
Unmarshal JSON
var u User
err := resp.Json(&u)
if err != nil {
   return err
}

var m map[string]interface{}
err := resp.Json(&m)
if err != nil {
   return err
}
Url() string
resp.Url()  //return the requested url
Headers() http.Header
resp.Headers()  //return the response headers
resp.Headers().Get("Content-Type")
resp.Cookies()  //return the response cookies
Advanced
GET
import "github.com/kirinlabs/HttpRequest"
   
resp,err := HttpRequest.Get("http://127.0.0.1:8000/")
resp,err := HttpRequest.Get("http://127.0.0.1:8000/","title=github")
resp,err := HttpRequest.Get("http://127.0.0.1:8000/?title=github")
resp,err := HttpRequest.Debug(true).JSON().Get("http://127.0.0.1:8000/")
POST
import "github.com/kirinlabs/HttpRequest"
   
resp,err := HttpRequest.Post("http://127.0.0.1:8000/")
resp,err := HttpRequest.SetHeaders(map[string]string{
	"title":"github",
}).Post("http://127.0.0.1:8000/")
resp,err := HttpRequest.Debug(true).JSON().Post("http://127.0.0.1:8000/")
Example
import "github.com/kirinlabs/HttpRequest"
   
resp,err := HttpRequest.Get("http://127.0.0.1:8000/")
resp,err := HttpRequest.Get("http://127.0.0.1:8000/","title=github")
resp,err := HttpRequest.Get("http://127.0.0.1:8000/?title=github")
resp,err := HttpRequest.Get("http://127.0.0.1:8000/",map[string]interface{}{
	"title":"github",
})
resp,err := HttpRequest.Debug(true).JSON().SetHeaders(map[string]string{
	"source":"api",
}).SetCookies(map[string]string{
	"name":"httprequest",
}).Post("http://127.0.0.1:8000/")


//Or
req := HttpRequest.NewRequest()
req := req.Debug(true).SetHeaders()
resp,err := req.Debug(true).JSON().SetHeaders(map[string]string{
    "source":"api",
}).SetCookies(map[string]string{
    "name":"httprequest",
}).Post("http://127.0.0.1:8000/")

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Export

func Export(v interface{}) string

func IntByte added in v1.1.0

func IntByte(v interface{}) []byte

func Json

func Json(v interface{}) string

Types

type Cookies

type Cookies map[string]string

type Data

type Data interface{}

type Fields

type Fields map[string]interface{}

type Headers

type Headers map[string]string

type Request

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

func CheckRedirect added in v1.0.1

func CheckRedirect(v func(req *http.Request, via []*http.Request) error) *Request

func Debug added in v1.0.1

func Debug(v bool) *Request

Debug model

func DisableKeepAlive

func DisableKeepAlive(v bool) *Request

func JSON added in v1.0.1

func JSON() *Request

func Jar added in v1.0.1

func Jar(v http.CookieJar) *Request

func NewRequest

func NewRequest() *Request

func Proxy added in v1.0.2

func Proxy(v func(*http.Request) (*url.URL, error)) *Request

func SetBasicAuth added in v1.0.1

func SetBasicAuth(username, password string) *Request

func SetCookies added in v1.0.1

func SetCookies(cookies map[string]string) *Request

func SetHeaders added in v1.0.1

func SetHeaders(headers map[string]string) *Request

func SetTLSClient added in v1.0.1

func SetTLSClient(v *tls.Config) *Request

func SetTimeout added in v1.0.1

func SetTimeout(d time.Duration) *Request

func TLSClient added in v1.0.1

func TLSClient(v *tls.Config) *Request

func Transport added in v1.0.5

func Transport(v *http.Transport) *Request

func (*Request) CheckRedirect added in v1.0.1

func (r *Request) CheckRedirect(v func(req *http.Request, via []*http.Request) error) *Request

func (*Request) Debug

func (r *Request) Debug(v bool) *Request

Debug model

func (*Request) Delete

func (r *Request) Delete(url string, data ...interface{}) (*Response, error)

Delete is a delete http request

func (*Request) DisableKeepAlive

func (r *Request) DisableKeepAlive(v bool) *Request

func (*Request) Get

func (r *Request) Get(url string, data ...interface{}) (*Response, error)

Get is a get http request

func (*Request) JSON added in v1.0.1

func (r *Request) JSON() *Request

func (*Request) Jar added in v1.0.1

func (r *Request) Jar(v http.CookieJar) *Request

func (*Request) Post

func (r *Request) Post(url string, data ...interface{}) (*Response, error)

Post is a post http request

func (*Request) PostJSON added in v1.1.2

func (r *Request) PostJSON(url string, data ...interface{}) (*Response, error)

func (*Request) Proxy added in v1.0.2

func (r *Request) Proxy(v func(*http.Request) (*url.URL, error)) *Request

func (*Request) Put

func (r *Request) Put(url string, data ...interface{}) (*Response, error)

Put is a put http request

func (*Request) Send added in v1.1.2

func (r *Request) Send(method, url string, data ...interface{}) (*Response, error)

Send http request

func (*Request) SetAuthHeader

func (r *Request) SetAuthHeader(token string) *Request

设置 Authorization 的 Token

func (*Request) SetBasicAuth added in v1.0.1

func (r *Request) SetBasicAuth(username, password string) *Request

Set basic auth

func (*Request) SetCookies

func (r *Request) SetCookies(cookies map[string]string) *Request

Set cookies

func (*Request) SetHeaders

func (r *Request) SetHeaders(headers map[string]string) *Request

设置请求头

func (*Request) SetHost added in v1.1.2

func (r *Request) SetHost(host string) *Request

设置 Host

func (*Request) SetTLSClient

func (r *Request) SetTLSClient(v *tls.Config) *Request

func (*Request) SetTimeout

func (r *Request) SetTimeout(d time.Duration) *Request

func (*Request) TLSClient added in v1.0.2

func (r *Request) TLSClient(v *tls.Config) *Request

func (*Request) Transport added in v1.0.5

func (r *Request) Transport(v *http.Transport) *Request

func (*Request) Upload

func (r *Request) Upload(url, filename, fileInput string) (*Response, error)

Upload file

type Response

type Response struct {
	R *http.Response

	Req *http.Request
	// contains filtered or unexported fields
}

func Delete added in v1.0.1

func Delete(url string, data ...interface{}) (*Response, error)

Delete is a delete http request

func Get added in v1.0.1

func Get(url string, data ...interface{}) (*Response, error)

Get is a get http request

func Post added in v1.0.1

func Post(url string, data ...interface{}) (*Response, error)

func Put added in v1.0.1

func Put(url string, data ...interface{}) (*Response, error)

Put is a put http request

func Upload added in v1.0.1

func Upload(url, filename, fileinput string) (*Response, error)

Upload file

func (*Response) Body

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

func (*Response) Close added in v1.0.1

func (r *Response) Close() error

func (*Response) Content added in v1.0.1

func (r *Response) Content() (string, error)

func (*Response) ContentLength added in v1.1.2

func (r *Response) ContentLength() int64

func (*Response) Cookies added in v1.0.1

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

func (*Response) Export added in v1.0.1

func (r *Response) Export() (string, error)

func (*Response) Headers added in v1.0.1

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

func (*Response) Json

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

func (*Response) Response

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

func (*Response) Result added in v1.1.2

func (r *Response) Result() gjson.Result

转换成gjson.Result,方便解析JSON响应

func (*Response) StatusCode

func (r *Response) StatusCode() int

func (*Response) Text added in v1.1.2

func (r *Response) Text() string

func (*Response) Time

func (r *Response) Time() int64

func (*Response) Unmarshal added in v1.0.1

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

func (*Response) Url

func (r *Response) Url() string

Jump to

Keyboard shortcuts

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