57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package requests
|
|
|
|
import (
|
|
"bytes"
|
|
"compress/gzip"
|
|
"compress/zlib"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
)
|
|
|
|
// Response 响应内容包含http.Response 已读
|
|
type Response struct {
|
|
readContent string
|
|
readResponse *http.Response
|
|
}
|
|
|
|
// FromHTTPResponse 生成Response 从标准http.Response
|
|
func FromHTTPResponse(resp *http.Response) (*Response, error) {
|
|
var err error
|
|
// 复制response 返回内容 并且测试是否有解压的需求
|
|
srcbuf, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp.Body.Close()
|
|
|
|
content := ""
|
|
srcReader := bytes.NewReader(srcbuf)
|
|
|
|
var reader io.ReadCloser
|
|
if reader, err = gzip.NewReader(srcReader); err == nil {
|
|
defer reader.Close()
|
|
buf, err := ioutil.ReadAll(reader)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
content = string(buf)
|
|
} else if reader, err = zlib.NewReader(srcReader); err == nil {
|
|
defer reader.Close()
|
|
buf, err := ioutil.ReadAll(reader)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
content = string(buf)
|
|
} else {
|
|
content = string(srcbuf)
|
|
}
|
|
|
|
return &Response{readContent: content, readResponse: resp}, nil
|
|
}
|
|
|
|
// Content 返回解压后的内容
|
|
func (gresp *Response) Content() string {
|
|
return gresp.readContent
|
|
}
|