|
@@ -8,37 +8,40 @@ import (
|
|
"net/http"
|
|
"net/http"
|
|
)
|
|
)
|
|
|
|
|
|
-
|
|
+
|
|
-func JSONDecoder(data io.ReadCloser, target interface{}) error {
|
|
+func JSONDecoder(data bytes.Buffer, target interface{}) error {
|
|
- decoder := json.NewDecoder(data)
|
|
+ err := json.Unmarshal(data.Bytes(), target)
|
|
-
|
|
|
|
- err := decoder.Decode(target)
|
|
|
|
|
|
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
+
|
|
-func GET(url string) (io.ReadCloser, error) {
|
|
+func GET(url string) (*bytes.Buffer, error) {
|
|
resp, err := http.Get(url)
|
|
resp, err := http.Get(url)
|
|
|
|
+ defer resp.Body.Close()
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Response error: %v", err)
|
|
return nil, fmt.Errorf("Response error: %v", err)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ body, err := bodyToBuffer(resp.Body)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, fmt.Errorf("Error reading body: %v", err)
|
|
|
|
+ }
|
|
|
|
+
|
|
if resp.StatusCode != http.StatusOK {
|
|
if resp.StatusCode != http.StatusOK {
|
|
- return resp.Body, fmt.Errorf("Request unsuccessful: %v - %v", resp.Status, url)
|
|
+ return body, fmt.Errorf("Request unsuccessful: %v - %v", resp.Status, url)
|
|
}
|
|
}
|
|
|
|
|
|
- return resp.Body, nil
|
|
+ return body, nil
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
+func bodyToBuffer(data io.ReadCloser) (*bytes.Buffer, error) {
|
|
-func BodyToString(data io.ReadCloser) (string, error) {
|
|
|
|
var buffer bytes.Buffer
|
|
var buffer bytes.Buffer
|
|
|
|
|
|
_, err := buffer.ReadFrom(data)
|
|
_, err := buffer.ReadFrom(data)
|
|
if err != nil {
|
|
if err != nil {
|
|
- return "", err
|
|
+ return nil, err
|
|
}
|
|
}
|
|
|
|
|
|
- return buffer.String(), nil
|
|
+ return &buffer, nil
|
|
}
|
|
}
|