添加: CDecompressNoAccept
This commit is contained in:
parent
9d998a1964
commit
5ca3e9fc0c
10
response.go
10
response.go
|
@ -16,7 +16,7 @@ type Response struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromHTTPResponse 生成Response 从标准http.Response
|
// FromHTTPResponse 生成Response 从标准http.Response
|
||||||
func FromHTTPResponse(resp *http.Response) (*Response, error) {
|
func FromHTTPResponse(resp *http.Response, IsDecompressNoAccept bool) (*Response, error) {
|
||||||
var err error
|
var err error
|
||||||
// 复制response 返回内容 并且测试是否有解压的需求
|
// 复制response 返回内容 并且测试是否有解压的需求
|
||||||
srcbuf, err := ioutil.ReadAll(resp.Body)
|
srcbuf, err := ioutil.ReadAll(resp.Body)
|
||||||
|
@ -26,8 +26,10 @@ func FromHTTPResponse(resp *http.Response) (*Response, error) {
|
||||||
resp.Body.Close()
|
resp.Body.Close()
|
||||||
|
|
||||||
content := ""
|
content := ""
|
||||||
srcReader := bytes.NewReader(srcbuf)
|
|
||||||
|
|
||||||
|
if IsDecompressNoAccept {
|
||||||
|
|
||||||
|
srcReader := bytes.NewReader(srcbuf)
|
||||||
var reader io.ReadCloser
|
var reader io.ReadCloser
|
||||||
if reader, err = gzip.NewReader(srcReader); err == nil {
|
if reader, err = gzip.NewReader(srcReader); err == nil {
|
||||||
defer reader.Close()
|
defer reader.Close()
|
||||||
|
@ -47,6 +49,10 @@ func FromHTTPResponse(resp *http.Response) (*Response, error) {
|
||||||
content = string(srcbuf)
|
content = string(srcbuf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
content = string(srcbuf)
|
||||||
|
}
|
||||||
|
|
||||||
return &Response{readContent: content, readResponse: resp}, nil
|
return &Response{readContent: content, readResponse: resp}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
"474420502.top/eson/gjson"
|
"474420502.top/eson/gjson"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestTest(t *testing.T) {
|
func TestFromHTTPResponse(t *testing.T) {
|
||||||
|
|
||||||
var gresp *http.Response
|
var gresp *http.Response
|
||||||
var err error
|
var err error
|
||||||
|
@ -15,7 +15,7 @@ func TestTest(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
resp, err := FromHTTPResponse(gresp)
|
resp, err := FromHTTPResponse(gresp, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
@ -32,3 +32,17 @@ func TestTest(t *testing.T) {
|
||||||
t.Error("esp.GetSrcResponse().Header == nil")
|
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
|
Password string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsSetting 是否设置的一些情景
|
||||||
|
type IsSetting struct {
|
||||||
|
isDecompressNoAccept bool
|
||||||
|
}
|
||||||
|
|
||||||
// Session 的基本方法
|
// Session 的基本方法
|
||||||
type Session struct {
|
type Session struct {
|
||||||
auth *BasicAuth
|
auth *BasicAuth
|
||||||
|
@ -103,6 +108,8 @@ type Session struct {
|
||||||
|
|
||||||
Header http.Header
|
Header http.Header
|
||||||
Query url.Values
|
Query url.Values
|
||||||
|
|
||||||
|
Is IsSetting
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -171,6 +178,10 @@ const (
|
||||||
|
|
||||||
// CCookiejar 持久化 CookieJar
|
// CCookiejar 持久化 CookieJar
|
||||||
CCookiejar // true or false ; default = true
|
CCookiejar // true or false ; default = true
|
||||||
|
|
||||||
|
// CDecompressNoAccept 解压 当response header 不存在 Accept-Encoding
|
||||||
|
// 很多特殊情景会不返回Accept-Encoding: Gzip. 如 不按照标准的网站
|
||||||
|
CDecompressNoAccept
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewSession 创建Session
|
// NewSession 创建Session
|
||||||
|
@ -187,7 +198,7 @@ func NewSession() *Session {
|
||||||
}
|
}
|
||||||
|
|
||||||
client.Jar = cjar
|
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 设置配置
|
// SetConfig 设置配置
|
||||||
|
@ -210,7 +221,9 @@ func (ses *Session) SetConfig(typeConfig TypeConfig, values interface{}) {
|
||||||
panic(errors.New("error type " + reflect.TypeOf(v).String()))
|
panic(errors.New("error type " + reflect.TypeOf(v).String()))
|
||||||
}
|
}
|
||||||
case CDialTimeout:
|
case CDialTimeout:
|
||||||
// 没时间实现这些小细节
|
// TODO: CDialTimeout CRequestTimeout 与 细节
|
||||||
|
case CDecompressNoAccept:
|
||||||
|
ses.Is.isDecompressNoAccept = values.(bool)
|
||||||
case CKeepAlives:
|
case CKeepAlives:
|
||||||
ses.transport.DisableKeepAlives = !values.(bool)
|
ses.transport.DisableKeepAlives = !values.(bool)
|
||||||
case CCookiejar:
|
case CCookiejar:
|
||||||
|
|
|
@ -312,5 +312,5 @@ func (wf *Workflow) Execute() (*Response, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return FromHTTPResponse(resp)
|
return FromHTTPResponse(resp, wf.session.Is.isDecompressNoAccept)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user