A simple http request library for golang.
Installgo get github.com/xioxu/goreq
Simple to use
req := goreq.Req(nil) body,_,_ := req.Get("https://www.baidu.com").Do() fmt.Print(string(body))
Table of contents
Options
Property | Description | Notes |
---|---|---|
Method | HTTP method | - |
URL | Fully qualified uri | - |
Proxy | Address of an HTTP proxy | - |
Headers | HTTP headers to setup for the request | - |
FollowRedirect | Follow HTTP 3xx responses as redirects | default: true , you can use goreq.TrueVal or goreq.FalseVal to set |
DisableKeepAlive | Disable keep alive feature | default: false, you can use goreq.TrueVal or goreq.FalseVal to set |
Jar | A cookie Jar to use for multiple subsequent requests | You can define your own custom cookie jar; see cookies section in following |
QueryString | Object containing querystring values to be appended to the uri | - |
Timeout | Request timeout value | |
HeadersToBeRemove | The headers you want to remove before send request | - |
Proxy
If you specify a proxy option, then the request (and any subsequent redirects) will be sent via a connection to the proxy server.
req := goreq.Req(&goreq.ReqOptions{ Proxy: goreq.NewString("http://localhost:8888")}) body,resp,_ := req.Get("https://www.baidu.com").Do() fmt.Println(string(body)) fmt.Println(resp.StatusCode)
Pipe
There are some Pipe methods to handle different case:
PipeStream
You can pipe any response to a writer. (Refer to UT: TestPipeSream)
req := goreq.Req(nil) req.Get("https://www.baidu.com").PipeStream(fileStream)
PipeReq
You can pipe a request result to next request (Refer to UT: TestPipeReq)
req1 := goreq.Req(nil) req2 := goreq.Req(nil) req2.Post("http://www.bbb.com/submit") req.Get("https://www.baidu.com").PipeReq(req2)
PipeFromReq
Pipe the http.Request content to goReq request (UT: TestPipeFromReq)
PipeToResponse
Pipe the result to a http.Response
We can create a reverseProxy server through PipeFromReq and PipeToResponse easily:
if err := http.ListenAndServe(":8080", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { req := goreq.Req(&goreq.ReqOptions{ Method: r.Method, Url: "https://www.baidu.com" + r.RequestURI, }) req.PipeFromReq(r).PipeToResponse(w) })); err != nil { panic(err) }
BodyContent
You can set the request body with the folloing methods:
- JsonObject
- JsonString
- FormData
req := Req(nil) v := url.Values{ "username": []string{"test"}, "password": []string{"test"}, } body,_, err := req.Post("http://localhost/login").FormData(v).Do() if err != nil{ fmt.Print(body) }
Cookie
cookieJar,_ := cookiejar.New(nil) req := goreq.Req(&goreq.ReqOptions{ Method: "get", Url: "https://www.baidu.com", Jar:cookieJar, })