gohttp

package module
v0.0.0-...-b55c707 Latest Latest
Warning

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

Go to latest
Published: Mar 22, 2019 License: MIT Imports: 20 Imported by: 6

README

gohttp

golang http client , support multi local ip address.

Thanks

develop base on gorequest

Documentation

Index

Constants

View Source
const (
	POST   = "POST"
	GET    = "GET"
	HEAD   = "HEAD"
	PUT    = "PUT"
	DELETE = "DELETE"
	PATCH  = "PATCH"
)

HTTP methods we support

Variables

View Source
var Types = map[string]string{
	"html":       "text/html",
	"json":       "application/json",
	"xml":        "application/xml",
	"urlencoded": "application/x-www-form-urlencoded",
	"form":       "application/x-www-form-urlencoded",
	"form-data":  "application/x-www-form-urlencoded",
	"text":       "text/plain",
	"multipart":  "multipart/form-data",
}

Functions

func GetDefaultClient

func GetDefaultClient() *http.Client

func GetDefaultDialer

func GetDefaultDialer() *net.Dialer

func GetDefaultTransport

func GetDefaultTransport() *http.Transport

func GetHostDelay

func GetHostDelay(host string) time.Duration

func IsDebug

func IsDebug() bool

func MakeClient

func MakeClient(transport http.RoundTripper, jar http.CookieJar) *http.Client

func MakeCookiejar

func MakeCookiejar() http.CookieJar

func MakeTransport

func MakeTransport(ip string) *http.Transport

func ResetCookie

func ResetCookie(urlstr string) error

func SetDebug

func SetDebug(d bool)

func SetHostDelay

func SetHostDelay(host string, delay time.Duration)

func SetOption

func SetOption(option *Option)

Types

type ClientGetter

type ClientGetter interface {
	GetHttpClient(httpurl string, proxyurl string, usejar bool) (*http.Client, error)
}

func GetDefaultGetter

func GetDefaultGetter() ClientGetter

type HttpAgent

type HttpAgent struct {
	Url          string
	ProxyUrl     string
	Method       string
	Header       map[string]string
	TargetType   string
	ForceType    string
	Data         map[string]interface{}
	FormData     url.Values
	QueryData    url.Values
	Cookies      []*http.Cookie
	TlsConfig    *tls.Config
	MaxTimeout   time.Duration
	MaxRedirects int
	Client       *http.Client
	SingleClient bool
	Usejar       bool
	Errors       []error
	DataAll      interface{}
	Getter       ClientGetter
}

A HttpAgent is a object storing all request data for client.

func New

func New() *HttpAgent

Used to create a new HttpAgent object.

func NewSingle

func NewSingle() *HttpAgent

func (*HttpAgent) AddCookie

func (s *HttpAgent) AddCookie(c *http.Cookie) *HttpAgent

AddCookie adds a cookie to the request. The behavior is the same as AddCookie on Request from net/http

func (*HttpAgent) Bytes

func (s *HttpAgent) Bytes(status ...int) ([]byte, int, error)

func (*HttpAgent) ChangeMapToURLValues

func (s *HttpAgent) ChangeMapToURLValues(data map[string]interface{}, toURLValues url.Values) url.Values

func (*HttpAgent) ClearAgent

func (s *HttpAgent) ClearAgent()

Clear HttpAgent data for another new request.

func (*HttpAgent) Delete

func (s *HttpAgent) Delete(targetUrl string) *HttpAgent

func (*HttpAgent) End

func (s *HttpAgent) End(callback ...func(response *http.Response, errs []error)) (*http.Response, []error)

End is the most important function that you need to call when ending the chain. The request won't proceed without calling it. End function returns Response which matchs the structure of Response type in Golang's http package (but without Body data). The body data itself returns as a string in a 2nd return value. Lastly but worht noticing, error array (NOTE: not just single error value) is returned as a 3rd value and nil otherwise.

For example:

resp, body, errs := gohttp.New().Get("http://www.google.com").End()
if( errs != nil){
  fmt.Println(errs)
}
fmt.Println(resp, body)

Moreover, End function also supports callback which you can put as a parameter. This extends the flexibility and makes gohttp fun and clean! You can use gohttp in whatever style you love!

For example:

func printBody(resp gohttp.Response, body string, errs []error){
  fmt.Println(resp.Status)
}
gohttp.New().Get("http://www..google.com").End(printBody)

func (*HttpAgent) Get

func (s *HttpAgent) Get(targetUrl string) *HttpAgent

func (*HttpAgent) Head

func (s *HttpAgent) Head(targetUrl string) *HttpAgent

func (*HttpAgent) Jar

func (s *HttpAgent) Jar(use bool) *HttpAgent

func (*HttpAgent) MaxRedirect

func (s *HttpAgent) MaxRedirect(redirect int) *HttpAgent

func (*HttpAgent) Param

func (s *HttpAgent) Param(key string, value string) *HttpAgent

Param As Go conventions accepts ; as a synonym for &. (https://github.com/golang/go/issues/2210) Thus, Query won't accept ; in a querystring if we provide something like fields=f1;f2;f3 This Param is then created as an alternative method to solve this.

func (*HttpAgent) Patch

func (s *HttpAgent) Patch(targetUrl string) *HttpAgent

func (*HttpAgent) Post

func (s *HttpAgent) Post(targetUrl string) *HttpAgent

func (*HttpAgent) PostParam

func (s *HttpAgent) PostParam(key string, value string) *HttpAgent

func (*HttpAgent) Proxy

func (s *HttpAgent) Proxy(proxyUrl string) *HttpAgent

Proxy function accepts a proxy url string to setup proxy url for any request. It provides a convenience way to setup proxy which have advantages over usual old ways. One example is you might try to set `http_proxy` environment. This means you are setting proxy up for all the requests. You will not be able to send different request with different proxy unless you change your `http_proxy` environment again. Another example is using Golang proxy setting. This is normal prefer way to do but too verbase compared to gohttp's Proxy:

gohttp.New().Proxy("http://myproxy:9999").
  Post("http://www.google.com").
  End()

To set no_proxy, just put empty string to Proxy func:

gohttp.New().Proxy("").
  Post("http://www.google.com").
  End()

func (*HttpAgent) Put

func (s *HttpAgent) Put(targetUrl string) *HttpAgent

func (*HttpAgent) Query

func (s *HttpAgent) Query(content interface{}) *HttpAgent

Query function accepts either json string or strings which will form a query-string in url of GET method or body of POST method. For example, making "/search?query=bicycle&size=50x50&weight=20kg" using GET method:

gohttp.New().
  Get("/search").
  Query(`{ query: 'bicycle' }`).
  Query(`{ size: '50x50' }`).
  Query(`{ weight: '20kg' }`).
  End()

Or you can put multiple json values:

gohttp.New().
  Get("/search").
  Query(`{ query: 'bicycle', size: '50x50', weight: '20kg' }`).
  End()

Strings are also acceptable:

gohttp.New().
  Get("/search").
  Query("query=bicycle&size=50x50").
  Query("weight=20kg").
  End()

Or even Mixed! :)

gohttp.New().
  Get("/search").
  Query("query=bicycle").
  Query(`{ size: '50x50', weight:'20kg' }`).
  End()

func (*HttpAgent) RequestByMethod

func (s *HttpAgent) RequestByMethod(method string, targetUrl string) *HttpAgent

func (*HttpAgent) Send

func (s *HttpAgent) Send(content interface{}) *HttpAgent

Send function accepts either json string or query strings which is usually used to assign data to POST or PUT method. Without specifying any type, if you give Send with json data, you are doing requesting in json format:

gohttp.New().
  Post("/search").
  Send(`{ query: 'sushi' }`).
  End()

While if you use at least one of querystring, gohttp understands and automatically set the Content-Type to `application/x-www-form-urlencoded`

gohttp.New().
  Post("/search").
  Send("query=tonkatsu").
  End()

So, if you want to strictly send json format, you need to use Type func to set it as `json` (Please see more details in Type function). You can also do multiple chain of Send:

gohttp.New().
  Post("/search").
  Send("query=bicycle&size=50x50").
  Send(`{ wheel: '4'}`).
  End()

From v0.2.0, Send function provide another convenience way to work with Struct type. You can mix and match it with json and query string:

type BrowserVersionSupport struct {
  Chrome string
  Firefox string
}
ver := BrowserVersionSupport{ Chrome: "37.0.2041.6", Firefox: "30.0" }
gohttp.New().
  Post("/update_version").
  Send(ver).
  Send(`{"Safari":"5.1.10"}`).
  End()

func (*HttpAgent) SendString

func (s *HttpAgent) SendString(content string) *HttpAgent

SendString returns HttpAgent's itself for any next chain and takes content string as a parameter. Its duty is to transform String into s.Data (map[string]interface{}) which later changes into appropriate format such as json, form, text, etc. in the End func. Send implicitly uses SendString and you should use Send instead of this.

func (*HttpAgent) Set

func (s *HttpAgent) Set(param string, value string) *HttpAgent

Set is used for setting header fields. Example. To set `Accept` as `application/json`

gohttp.New().
  Post("/gamelist").
  Set("Accept", "application/json").
  End()

func (*HttpAgent) SetFormData

func (s *HttpAgent) SetFormData(formData url.Values) *HttpAgent

func (*HttpAgent) SetPostData

func (s *HttpAgent) SetPostData(data map[string]interface{}) *HttpAgent

func (*HttpAgent) SetQueryData

func (s *HttpAgent) SetQueryData(queryData url.Values) *HttpAgent

func (*HttpAgent) String

func (s *HttpAgent) String(status ...int) (string, int, error)

func (*HttpAgent) TLSClientConfig

func (s *HttpAgent) TLSClientConfig(config *tls.Config) *HttpAgent

TLSClientConfig Set TLSClientConfig for underling Transport. One example is you can use it to disable security check (https):

gohttp.New().TLSClientConfig(&tls.Config{ InsecureSkipVerify: true}).
	Get("https://disable-security-check.com").
	End()

func (*HttpAgent) Timeout

func (s *HttpAgent) Timeout(timeout time.Duration) *HttpAgent

func (*HttpAgent) ToJSON

func (s *HttpAgent) ToJSON(v interface{}, status ...int) (int, error)

func (*HttpAgent) ToXML

func (s *HttpAgent) ToXML(v interface{}, status ...int) (int, error)

func (*HttpAgent) Type

func (s *HttpAgent) Type(typeStr string) *HttpAgent

Type is a convenience function to specify the data type to send. For example, to send data as `application/x-www-form-urlencoded` :

gohttp.New().
  Post("/recipe").
  Type("form").
  Send(`{ name: "egg benedict", category: "brunch" }`).
  End()

This will POST the body "name=egg benedict&category=brunch" to url /recipe

gohttp supports

"text/html" uses "html"
"application/json" uses "json"
"application/xml" uses "xml"
"application/x-www-form-urlencoded" uses "urlencoded", "form" or "form-data"

type IpRollClient

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

func NewIpRollClient

func NewIpRollClient(ip ...string) *IpRollClient

func (*IpRollClient) GetHttpClient

func (s *IpRollClient) GetHttpClient(urlStr string, proxy string, usejar bool) (*http.Client, error)

func (*IpRollClient) ResetCookie

func (s *IpRollClient) ResetCookie(uri *url.URL)

type Option

type Option struct {
	Address        []string
	ConnectTimeout time.Duration
	TLSTimeout     time.Duration
	Timeout        time.Duration
	Agent          string
	Delay          time.Duration
	MaxRedirects   int
	MaxIdleConns   int
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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