Movatterモバイル変換


[0]ホーム

URL:


Gopher with MachineGun

GoRequest

"Shooting Requests like a Machine Gun"

View the Project on GitHubparnurzeal/gorequest

GoRequest

GoRequest -- Simplified HTTP client ( inspired by famous SuperAgent lib in Node.js )

Sending request would never been fun and easier than this. It comes with lots of feature:

Installation

$go get github.com/parnurzeal/gorequest

Documentation

SeeGo Doc orGo Walker for usage and details.

Status

Drone Build StatusTravis Build Status

Why should you use GoRequest?

GoRequest makes thing much more simple for you, making http client more awesome and fun like SuperAgent + golang style usage.

This is what you normally do for a simple GET without GoRequest:

resp,err:=http.Get("http://example.com/")

With GoRequest:

request:=gorequest.New()resp,body,errs:=request.Get("http://example.com/").End()

Or below if you don't want to reuse it for other requests.

resp,body,errs:=gorequest.New().Get("http://example.com/").End()

How about getting control over HTTP client headers, redirect policy, and etc. Things is getting more complicated in golang. You need to create a Client, setting header in different command, ... to do just only oneGET

client:=&http.Client{CheckRedirect:redirectPolicyFunc,}req,err:=http.NewRequest("GET","http://example.com",nil)req.Header.Add("If-None-Match",`W/"wyzzy"`)resp,err:=client.Do(req)

Why making things ugly while you can just do as follows:

request:=gorequest.New()resp,body,errs:=request.Get("http://example.com").RedirectPolicy(redirectPolicyFunc).Set("If-None-Match",`W/"wyzzy"`).End()

DELETE,HEAD,POST,PUT are now supported and can be used the same way asGET:

request:=gorequest.New()resp,body,errs:=request.Post("http://example.com").End()// PUT -> request.Put("http://example.com").End()// DELETE -> request.Delete("http://example.com").End()// HEAD -> request.Head("http://example.com").End()

JSON

For aJSON POST with standard libraries, you might need to marshal map data structure to json format, setting header to 'application/json' (and other headers if you need to) and declare http.Client. So, you code become longer and hard to maintain:

m:=map[string]interface{}{"name":"backy","species":"dog",}mJson,_:=json.Marshal(m)contentReader:=bytes.NewReader(mJson)req,_:=http.NewRequest("POST","http://example.com",contentReader)req.Header.Set("Content-Type","application/json")req.Header.Set("Notes","GoRequest is coming!")client:=&http.Client{}resp,_:=client.Do(req)

Compared to our GoRequest version, JSON is for sure a default. So, it turns out to be just one simple line!:

request:=gorequest.New()resp,body,errs:=request.Post("http://example.com").Set("Notes","gorequst is coming!").Send(`{"name":"backy", "species":"dog"}`).End()

Moreover, it also supports struct type. So, you can have a funMix & Match sending the different data types for your request:

typeBrowserVersionSupportstruct{ChromestringFirefoxstring}ver:=BrowserVersionSupport{Chrome:"37.0.2041.6",Firefox:"30.0"}request:=gorequest.New()resp,body,errs:=request.Post("http://version.com/update")Send(ver).Send(`{"Safari":"5.1.10"}`).End()

Callback

Moreover, GoRequest also supports callback function. This gives you much more flexibility on using it. You can use it any way to match your own style!Let's see a bit of callback example:

funcprintStatus(respgorequest.Response,bodystring,errs[]error){fmt.Println(resp.Status)}gorequest.New().Get("http://example.com").End(printStatus)

Proxy

In the case when you are behind proxy, GoRequest can handle it easily with Proxy func:

request:=gorequest.New().Proxy("http://proxy:999")resp,body,errs:=request.Get("http://example-proxy.com").End()// To reuse same client with no_proxy, use empty string:resp,body,errs=request.Proxy("").("http://example-no-proxy.com").End()

Timeout

Timeout can be set in any time duration using time package:

request:=gorequest.New().Timeout(2*time.Millisecond)resp,body,errs:=request.Get("http://example.com").End()

Credits

License

GoRequest is MIT License.


[8]ページ先頭

©2009-2025 Movatter.jp