添加: CDecompressNoAccept
This commit is contained in:
parent
9d998a1964
commit
5ca3e9fc0c
38
response.go
38
response.go
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
17
session.go
17
session.go
|
@ -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:
|
||||
|
|
|
@ -312,5 +312,5 @@ func (wf *Workflow) Execute() (*Response, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
return FromHTTPResponse(resp)
|
||||
return FromHTTPResponse(resp, wf.session.Is.isDecompressNoAccept)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user