mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-25 08:15:15 +00:00
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package util
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
// Response is wrapper for standard http.Response and provides
|
|
// more methods.
|
|
type Response struct {
|
|
*http.Response
|
|
|
|
// Body overrides the composited Body field.
|
|
Body []byte
|
|
}
|
|
|
|
// NewResponse is a wrapper of the http.Response instance, it reads the response body and close the file.
|
|
func NewResponse(r *http.Response) (response *Response, err error) {
|
|
body, err := io.ReadAll(r.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = r.Body.Close()
|
|
response = &Response{Response: r, Body: body}
|
|
return response, err
|
|
}
|
|
|
|
// String converts response body to string.
|
|
// An empty string will be returned if error.
|
|
func (r *Response) String() string {
|
|
return string(r.Body)
|
|
}
|
|
|
|
func (r *Response) DecodeJSON(o interface{}) error {
|
|
return json.Unmarshal(r.Body, o)
|
|
}
|
|
|
|
func (r *Response) IsError() bool {
|
|
return r.StatusCode >= 400
|
|
}
|
|
|
|
func (r *Response) IsJSON() bool {
|
|
switch r.Header.Get("content-type") {
|
|
case "text/json", "application/json", "application/json; charset=utf-8":
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (r *Response) IsHTML() bool {
|
|
switch r.Header.Get("content-type") {
|
|
case "text/html":
|
|
return true
|
|
}
|
|
return false
|
|
}
|