Documentation ¶
Overview ¶
Package gorequest inspired by Nodejs SuperAgent provides easy-way to write http client
Index ¶
- Variables
- type Request
- type Response
- type SuperAgent
- func (s *SuperAgent) ClearSuperAgent()
- func (s *SuperAgent) Delete(targetUrl string) *SuperAgent
- func (s *SuperAgent) End(callback ...func(response Response, body string, errs []error)) (Response, string, []error)
- func (s *SuperAgent) Get(targetUrl string) *SuperAgent
- func (s *SuperAgent) Head(targetUrl string) *SuperAgent
- func (s *SuperAgent) Post(targetUrl string) *SuperAgent
- func (s *SuperAgent) Proxy(proxyUrl string) *SuperAgent
- func (s *SuperAgent) Put(targetUrl string) *SuperAgent
- func (s *SuperAgent) Query(content string) *SuperAgent
- func (s *SuperAgent) RedirectPolicy(policy func(req Request, via []Request) error) *SuperAgent
- func (s *SuperAgent) Send(content interface{}) *SuperAgent
- func (s *SuperAgent) SendString(content string) *SuperAgent
- func (s *SuperAgent) Set(param string, value string) *SuperAgent
- func (s *SuperAgent) Timeout(timeout time.Duration) *SuperAgent
- func (s *SuperAgent) Type(typeStr string) *SuperAgent
Constants ¶
This section is empty.
Variables ¶
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",
}
Functions ¶
This section is empty.
Types ¶
type SuperAgent ¶
type SuperAgent struct { Url string Method string Header map[string]string TargetType string ForceType string Data map[string]interface{} FormData url.Values QueryData url.Values Client *http.Client Transport *http.Transport Errors []error }
A SuperAgent is a object storing all request data for client.
func (*SuperAgent) ClearSuperAgent ¶
func (s *SuperAgent) ClearSuperAgent()
Clear SuperAgent data for another new request.
func (*SuperAgent) Delete ¶ added in v0.2.0
func (s *SuperAgent) Delete(targetUrl string) *SuperAgent
func (*SuperAgent) End ¶
func (s *SuperAgent) End(callback ...func(response Response, body string, errs []error)) (Response, string, []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 := gorequest.New().Get("http://www.google.com").End() if( errs != nil){ fmt.Pritnln(errs) } fmt.Println(resp, body)
Moreover, End function also supports callback which you can put as a parameter. This extends the flexibility and makes GoRequest fun and clean! You can use GoRequest in whatever style you love!
For example:
func printBody(resp gorequest.Response, body string, errs []error){ fmt.Println(resp.Status) } gorequest.New().Get("http://www..google.com").End(printBody)
func (*SuperAgent) Get ¶
func (s *SuperAgent) Get(targetUrl string) *SuperAgent
func (*SuperAgent) Head ¶ added in v0.2.0
func (s *SuperAgent) Head(targetUrl string) *SuperAgent
TODO: testing for Head func
func (*SuperAgent) Post ¶
func (s *SuperAgent) Post(targetUrl string) *SuperAgent
TODO: add test for Post
func (*SuperAgent) Proxy ¶ added in v0.2.0
func (s *SuperAgent) Proxy(proxyUrl string) *SuperAgent
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 GoRequest's Proxy:
gorequest.New().Proxy("http://myproxy:9999"). Post("http://www.google.com"). End()
To set no_proxy, just put empty string to Proxy func:
gorequest.New().Proxy(""). Post("http://www.google.com"). End()
func (*SuperAgent) Put ¶ added in v0.2.0
func (s *SuperAgent) Put(targetUrl string) *SuperAgent
func (*SuperAgent) Query ¶
func (s *SuperAgent) Query(content string) *SuperAgent
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:
gorequest.New(). Get("/search"). Query(`{ query: 'bicycle' }`). Query(`{ size: '50x50' }`). Query(`{ weight: '20kg' }`). End()
Or you can put multiple json values:
gorequest.New(). Get("/search"). Query(`{ query: 'bicycle', size: '50x50', weight: '20kg' }`). End()
Strings are also acceptable:
gorequest.New(). Get("/search"). Query("query=bicycle&size=50x50"). Query("weight=20kg"). End()
Or even Mixed! :)
gorequest.New(). Get("/search"). Query("query=bicycle"). Query(`{ size: '50x50', weight:'20kg' }`). End()
TODO: check error
func (*SuperAgent) RedirectPolicy ¶
func (s *SuperAgent) RedirectPolicy(policy func(req Request, via []Request) error) *SuperAgent
func (*SuperAgent) Send ¶
func (s *SuperAgent) Send(content interface{}) *SuperAgent
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:
gorequest.New(). Post("/search"). Send(`{ query: 'sushi' }`). End()
While if you use at least one of querystring, GoRequest understands and automatically set the Content-Type to `application/x-www-form-urlencoded`
gorequest.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:
gorequest.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" } gorequest.New(). Post("/update_version"). Send(ver). Send(`{"Safari":"5.1.10"}`). End()
TODO: check error from form and add normal text mode or other mode to Send func
func (*SuperAgent) SendString ¶ added in v0.2.0
func (s *SuperAgent) SendString(content string) *SuperAgent
SendString returns SuperAgent'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 (*SuperAgent) Set ¶
func (s *SuperAgent) Set(param string, value string) *SuperAgent
Set is used for setting header fields. Example. To set `Accept` as `application/json`
gorequest.New(). Post("/gamelist"). Set("Accept", "application/json"). End()
TODO: make Set be able to get multiple fields
func (*SuperAgent) Timeout ¶ added in v0.2.0
func (s *SuperAgent) Timeout(timeout time.Duration) *SuperAgent
TODO-1: Add docs for Timeout TODO-2: a test for Timeout, check time and slow server
func (*SuperAgent) Type ¶
func (s *SuperAgent) Type(typeStr string) *SuperAgent
Type is a convenience function to specify the data type to send. For example, to send data as `application/x-www-form-urlencoded` :
gorequest.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
GoRequest supports
"text/html" uses "html" "application/json" uses "json" "application/xml" uses "xml" "application/x-www-form-urlencoded" uses "urlencoded", "form" or "form-data"