添加: CDecompressNoAccept

This commit is contained in:
huangsimin 2019-09-04 11:35:21 +08:00
parent 9d998a1964
commit 5ca3e9fc0c
4 changed files with 54 additions and 21 deletions

View File

@ -16,7 +16,7 @@ type Response struct {
}
// FromHTTPResponse 生成Response 从标准http.Response
func FromHTTPResponse(resp *http.Response) (*Response, error) {
func FromHTTPResponse(resp *http.Response, IsDecompressNoAccept bool) (*Response, error) {
var err error
// 复制response 返回内容 并且测试是否有解压的需求
srcbuf, err := ioutil.ReadAll(resp.Body)
@ -26,23 +26,29 @@ func FromHTTPResponse(resp *http.Response) (*Response, error) {
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
if IsDecompressNoAccept {
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)
}
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)
}

View File

@ -7,7 +7,7 @@ import (
"474420502.top/eson/gjson"
)
func TestTest(t *testing.T) {
func TestFromHTTPResponse(t *testing.T) {
var gresp *http.Response
var err error
@ -15,7 +15,7 @@ func TestTest(t *testing.T) {
if err != nil {
t.Error(err)
}
resp, err := FromHTTPResponse(gresp)
resp, err := FromHTTPResponse(gresp, false)
if err != nil {
t.Error(err)
}
@ -32,3 +32,17 @@ func TestTest(t *testing.T) {
t.Error("esp.GetSrcResponse().Header == nil")
}
}
func TestResponseGzipZip(t *testing.T) {
ses := NewSession()
if wf := ses.Get("http://httpbin.org/get"); wf != nil {
wf.AddHeader("accept-encoding", "deflate")
resp, err := wf.Execute()
if err != nil {
t.Error(err)
} else {
t.Error(resp.Content())
}
}
}

View File

@ -90,6 +90,11 @@ type BasicAuth struct {
Password string
}
// IsSetting 是否设置的一些情景
type IsSetting struct {
isDecompressNoAccept bool
}
// Session 的基本方法
type Session struct {
auth *BasicAuth
@ -103,6 +108,8 @@ type Session struct {
Header http.Header
Query url.Values
Is IsSetting
}
const (
@ -171,6 +178,10 @@ const (
// CCookiejar 持久化 CookieJar
CCookiejar // true or false ; default = true
// CDecompressNoAccept 解压 当response header 不存在 Accept-Encoding
// 很多特殊情景会不返回Accept-Encoding: Gzip. 如 不按照标准的网站
CDecompressNoAccept
)
// NewSession 创建Session
@ -187,7 +198,7 @@ func NewSession() *Session {
}
client.Jar = cjar
return &Session{client: client, body: NewBody(), transport: transport, auth: nil, cookiejar: client.Jar, Header: make(http.Header)}
return &Session{client: client, body: NewBody(), transport: transport, auth: nil, cookiejar: client.Jar, Header: make(http.Header), Is: IsSetting{false}}
}
// SetConfig 设置配置
@ -210,7 +221,9 @@ func (ses *Session) SetConfig(typeConfig TypeConfig, values interface{}) {
panic(errors.New("error type " + reflect.TypeOf(v).String()))
}
case CDialTimeout:
// 没时间实现这些小细节
// TODO: CDialTimeout CRequestTimeout 与 细节
case CDecompressNoAccept:
ses.Is.isDecompressNoAccept = values.(bool)
case CKeepAlives:
ses.transport.DisableKeepAlives = !values.(bool)
case CCookiejar:

View File

@ -312,5 +312,5 @@ func (wf *Workflow) Execute() (*Response, error) {
return nil, err
}
return FromHTTPResponse(resp)
return FromHTTPResponse(resp, wf.session.Is.isDecompressNoAccept)
}