diff options
author | Andinus <andinus@nand.sh> | 2020-03-24 19:33:10 +0530 |
---|---|---|
committer | Andinus <andinus@nand.sh> | 2020-03-24 19:33:10 +0530 |
commit | a5f291028dbcc11bd54aa610e4c64270c6a3d022 (patch) | |
tree | e3344d5f21508e50b5637511cb4a7f8a946e2ae8 | |
parent | bf040f6d1c8c7bc33d5268db42bc2ac9016e2198 (diff) | |
download | cetus-a5f291028dbcc11bd54aa610e4c64270c6a3d022.tar.gz |
Add request package
-rw-r--r-- | request.go | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/request.go b/request.go new file mode 100644 index 0000000..b5088f9 --- /dev/null +++ b/request.go @@ -0,0 +1,70 @@ +// Request manages all outgoing requests for cetus projects. +package request + +import ( + "fmt" + "io/ioutil" + "net/http" + "time" +) + +// GetRes takes api and params as input and returns the body and +// error. +func (c http.Client) GetRes(api string, params map[string]string) (string, error) { + var body string + + req, err := http.NewRequest(http.MethodGet, api, nil) + if err != nil { + err = fmt.Errorf("%s\n%s", + "request.go: failed to create request", + err.Error()) + return body, err + } + + // User-Agent should be passed with every request to make work + // easier for the server handler. Include contact information + // along with the project name so they could reach you if + // required. + req.Header.Set("User-Agent", + "Andinus / Cetus - https://andinus.nand.sh/projects/cetus") + + // Params is a simple map[string]string which contains + // parameters that needs to be passed along with the request. + // There is no check involved here & it should be done before + // passing params to this function. + q := req.URL.Query() + for k, v := range params { + q.Add(k, v) + } + req.URL.RawQuery = q.Encode() + + res, err := c.Do(req) + if err != nil { + err = fmt.Errorf("%s\n%s", + "request.go: failed to get response", + err.Error()) + return body, err + } + defer res.Body.Close() + + if res.StatusCode != 200 { + err = fmt.Errorf("Unexpected response status code received: %d %s", + res.StatusCode, + http.StatusText(res.StatusCode)) + return body, err + } + + // This will read everything to memory and is okay to use here + // because the json response received will be small unlike in + // download.go (package background) where it is an image. + out, err := ioutil.ReadAll(res.Body) + if err != nil { + err = fmt.Errorf("%s\n%s", + "request.go: failed to read body to out (var)", + err.Error()) + return body, err + } + + body = string(out) + return body, err +} |