From 53dc71945c20c6b82d507db7005bf6a7b4027383 Mon Sep 17 00:00:00 2001 From: bincooo Date: Thu, 27 Jun 2024 15:12:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20stream=20=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E5=A4=B4=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sessions.go | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/sessions.go b/sessions.go index 043d8d4..499e3be 100644 --- a/sessions.go +++ b/sessions.go @@ -17,6 +17,7 @@ import ( ja3 "github.com/wangluozhe/requests/transport" "github.com/wangluozhe/requests/url" "github.com/wangluozhe/requests/utils" + "io" "io/ioutil" "log" url2 "net/url" @@ -463,6 +464,34 @@ func (s *Session) Send(preq *models.PrepareRequest, req *url.Request) (*models.R // 构建response参数 func (s *Session) buildResponse(resp *http.Response, preq *models.PrepareRequest, req *url.Request) (*models.Response, error) { + stream := strings.Contains(resp.Header.Get("Content-Type"), "application/stream") || + strings.Contains(resp.Header.Get("Content-Type"), "text/event-stream") + encoding := resp.Header.Get("Content-Encoding") + if stream { + + body := resp.Body + if encoding == "br" { + body = io.NopCloser(brotli.NewReader(resp.Body)) + } + + response := &models.Response{ + Url: preq.Url, + Headers: resp.Header, + Cookies: resp.Cookies(), + Text: "", + Content: nil, + Body: body, + StatusCode: resp.StatusCode, + History: []*models.Response{}, + Request: req, + } + if resp.Cookies() != nil { + u, _ := url2.Parse(preq.Url) + s.Cookies.SetCookies(u, resp.Cookies()) + } + return response, nil + } + if resp.Body != nil { defer resp.Body.Close() } @@ -470,9 +499,9 @@ func (s *Session) buildResponse(resp *http.Response, preq *models.PrepareRequest if err != nil { return nil, err } - encoding := resp.Header.Get("Content-Encoding") + DecompressBody(&content, encoding) - body := ioutil.NopCloser(bytes.NewReader(content)) + body := io.NopCloser(bytes.NewReader(content)) response := &models.Response{ Url: preq.Url, Headers: resp.Header, From 765935c797c521a7cd96a110654b3031bd11ee45 Mon Sep 17 00:00:00 2001 From: bincooo Date: Fri, 28 Jun 2024 05:51:01 +0800 Subject: [PATCH 2/3] feat: readClose interface --- sessions.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sessions.go b/sessions.go index 499e3be..df85854 100644 --- a/sessions.go +++ b/sessions.go @@ -468,10 +468,12 @@ func (s *Session) buildResponse(resp *http.Response, preq *models.PrepareRequest strings.Contains(resp.Header.Get("Content-Type"), "text/event-stream") encoding := resp.Header.Get("Content-Encoding") if stream { - body := resp.Body if encoding == "br" { - body = io.NopCloser(brotli.NewReader(resp.Body)) + body = struct { + io.Reader + io.Closer + }{brotli.NewReader(resp.Body), resp.Body} } response := &models.Response{ From a790a9318421f398f9d191e5eab698eaffd9062d Mon Sep 17 00:00:00 2001 From: bincooo Date: Fri, 2 Aug 2024 00:38:47 +0800 Subject: [PATCH 3/3] style: udpate --- sessions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sessions.go b/sessions.go index df85854..513216a 100644 --- a/sessions.go +++ b/sessions.go @@ -470,7 +470,7 @@ func (s *Session) buildResponse(resp *http.Response, preq *models.PrepareRequest if stream { body := resp.Body if encoding == "br" { - body = struct { + body = &struct { io.Reader io.Closer }{brotli.NewReader(resp.Body), resp.Body}