diff --git a/README.md b/README.md index 27dabb1..24eaa40 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,8 @@ Requests is a fully featured HTTP client library for Golang. Network requests ca * [Local network card](https://github.com/gospider007/requests/blob/master/test/request/localAddr_test.go) * [Response](https://github.com/gospider007/requests/tree/master/test/response) * [Return whether to reuse connections](https://github.com/gospider007/requests/blob/master/test/response/isNewConn_test.go) + * [Return Raw Connection](https://github.com/gospider007/requests/blob/master/test/response/rawConn_test.go) + * [Return Proxy](https://github.com/gospider007/requests/blob/master/test/response/useProxy_test.go) * [Middleware](https://github.com/gospider007/requests/tree/master/test/middleware) * [Option Callback Method](https://github.com/gospider007/requests/blob/master/test/middleware/optionltCallBack_test.go) * [Result Callback Method](https://github.com/gospider007/requests/blob/master/test/middleware/resultCallBack_test.go) diff --git a/response.go b/response.go index 5d00d16..3c93ceb 100644 --- a/response.go +++ b/response.go @@ -249,19 +249,12 @@ func (obj *Response) defaultDecode() bool { return strings.Contains(obj.ContentType(), "html") } -func (obj *Response) Read(con []byte) (i int, err error) { - done := make(chan struct{}) - go func() { - i, err = obj.response.Body.Read(con) - close(done) - }() - select { - case <-obj.response.Request.Context().Done(): - obj.ForceCloseConn() - err = obj.response.Request.Context().Err() - case <-done: +// must stream=true +func (obj *Response) Conn() *connecotr { + if obj.IsStream() { + return obj.rawConn.Conn() } - return + return nil } // return true if response is stream @@ -284,12 +277,17 @@ func (obj *Response) ReadBody() (err error) { bufferPool.Put(bBody) }() if obj.bar && obj.ContentLength() > 0 { - err = tools.CopyWitchContext(obj.response.Request.Context(), &barBody{ + _, err = io.Copy(&barBody{ bar: bar.NewClient(obj.response.ContentLength), body: bBody, }, obj.response.Body) + // err = tools.CopyWitchContext(obj.response.Request.Context(), &barBody{ + // bar: bar.NewClient(obj.response.ContentLength), + // body: bBody, + // }, obj.response.Body) } else { - err = tools.CopyWitchContext(obj.ctx, bBody, obj.response.Body) + _, err = io.Copy(bBody, obj.response.Body) + // err = tools.CopyWitchContext(obj.ctx, bBody, obj.response.Body) } if err != nil { obj.ForceCloseConn() diff --git a/test/response/rawConn_test.go b/test/response/rawConn_test.go new file mode 100644 index 0000000..7543ca2 --- /dev/null +++ b/test/response/rawConn_test.go @@ -0,0 +1,24 @@ +package main + +import ( + "testing" + + "github.com/gospider007/requests" +) + +func TestRawConn(t *testing.T) { + resp, err := requests.Get(nil, "https://httpbin.org/anything") + if err != nil { + t.Error(err) + } + if resp.Conn() != nil { + t.Error("conn is not nil") + } + resp, err = requests.Get(nil, "https://httpbin.org/anything", requests.RequestOption{Stream: true}) + if err != nil { + t.Error(err) + } + if resp.Conn() == nil { + t.Error("conn is nil") + } +} diff --git a/test/response/useProxy_test.go b/test/response/useProxy_test.go new file mode 100644 index 0000000..43b907f --- /dev/null +++ b/test/response/useProxy_test.go @@ -0,0 +1,17 @@ +package main + +import ( + "testing" + + "github.com/gospider007/requests" +) + +func TestUseProxy(t *testing.T) { + resp, err := requests.Get(nil, "https://httpbin.org/anything") + if err != nil { + t.Error(err) + } + if resp.Proxy() != "" { + t.Error("proxy error") + } +}