From 93b756d9fbea1eca7fd38ad00d4ecb98dae195bc Mon Sep 17 00:00:00 2001 From: starainrt Date: Mon, 6 Jun 2022 11:18:42 +0800 Subject: [PATCH] add no auto redirect config --- curl.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/curl.go b/curl.go index a8b4d8b..6bd27b6 100644 --- a/curl.go +++ b/curl.go @@ -39,6 +39,7 @@ type Request struct { RespHeader http.Header RespCookies []*http.Cookie RespHttpCode int + Location *url.URL CircleBuffer *stario.StarBuffer respReader io.ReadCloser RequestOpts @@ -57,6 +58,7 @@ type RequestOpts struct { SkipTLSVerify bool CustomTransport *http.Transport Queries map[string]string + DisableRedirect bool } type RequestOpt func(opt *RequestOpts) @@ -167,6 +169,12 @@ func WithSkipTLSVerify(skip bool) RequestOpt { } } +func WithDisableRedirect(disable bool) RequestOpt { + return func(opt *RequestOpts) { + opt.DisableRedirect = disable + } +} + func NewRequests(url string, rawdata []byte, method string, opts ...RequestOpt) Request { req := Request{ RequestOpts: RequestOpts{ @@ -292,6 +300,7 @@ func Curl(curl Request) (resps Request, err error) { if err != nil { return Request{}, err } + curl.Location, _ = resp.Location() curl.RespHttpCode = resp.StatusCode curl.RespHeader = resp.Header curl.RespCookies = resp.Cookies() @@ -387,6 +396,11 @@ func netcurl(curl Request) (*http.Response, error) { client := &http.Client{ Transport: curl.CustomTransport, } + if curl.DisableRedirect { + client.CheckRedirect = func(req *http.Request, via []*http.Request) error { + return http.ErrUseLastResponse + } + } resp, err := client.Do(req) return resp, err }