Commit d313f60f authored by wangmingming's avatar wangmingming

组合session和request的 header cookie redirect 等

parent 3fd88b99
...@@ -8,13 +8,11 @@ import ( ...@@ -8,13 +8,11 @@ import (
"encoding/json" "encoding/json"
"github.com/andybalholm/brotli" "github.com/andybalholm/brotli"
http "github.com/bogdanfinn/fhttp" http "github.com/bogdanfinn/fhttp"
"github.com/bogdanfinn/fhttp/cookiejar"
tls_client "github.com/bogdanfinn/tls-client" tls_client "github.com/bogdanfinn/tls-client"
"github.com/wmm1996528/requests/models" "github.com/wmm1996528/requests/models"
"github.com/wmm1996528/requests/tls" "github.com/wmm1996528/requests/tls"
"github.com/wmm1996528/requests/url" "github.com/wmm1996528/requests/url"
"io" "io"
"io/ioutil"
url2 "net/url" url2 "net/url"
"strings" "strings"
) )
...@@ -25,18 +23,15 @@ func NewSession(tlsVersion tls.TlsVersion) *Session { ...@@ -25,18 +23,15 @@ func NewSession(tlsVersion tls.TlsVersion) *Session {
} }
type Session struct { type Session struct {
Params *url.Params Params map[string]string
Headers *url.Header Headers map[string]string
Cookies *cookiejar.Jar Cookies map[string]string
Auth []string Auth []string
Proxies string Proxy string
Verify bool Verify bool
Cert []string tlsVersion int
Ja3 string Client tls_client.HttpClient
MaxRedirects int AllowRedirects bool
request *url.Request
tlsVersion int
Client tls_client.HttpClient
} }
// 预请求处理 // 预请求处理
...@@ -99,18 +94,6 @@ func (s *Session) Do(method string, request *url.Request) (*models.Response, err ...@@ -99,18 +94,6 @@ func (s *Session) Do(method string, request *url.Request) (*models.Response, err
// 初始化个新的 // 初始化个新的
s.Client = tls.NewClient(request.TlsProfile) s.Client = tls.NewClient(request.TlsProfile)
} }
// 处理cookie
if request.Cookies != nil {
var cks []*http.Cookie
for k, v := range request.Cookies {
cks = append(cks, &http.Cookie{
Name: k,
Value: v,
})
}
uri, _ := url2.Parse(request.Url)
s.Client.SetCookies(uri, cks)
}
request.Method = method request.Method = method
preq, err := s.PreRequest(request) preq, err := s.PreRequest(request)
...@@ -134,12 +117,38 @@ func (s *Session) PreRequest(request *url.Request) (*http.Request, error) { ...@@ -134,12 +117,38 @@ func (s *Session) PreRequest(request *url.Request) (*http.Request, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
// * 处理cookie
if request.Cookies != nil {
var cks []*http.Cookie
for k, v := range request.Cookies {
cks = append(cks, &http.Cookie{
Name: k,
Value: v,
})
}
uri, _ := url2.Parse(request.Url)
s.Client.SetCookies(uri, cks)
}
// * 处理代理
if request.Proxy != "" {
s.Client.SetProxy(request.Proxy)
} else {
if s.Proxy != "" {
s.Client.SetProxy(s.Proxy)
}
}
// * 是否自动跳转
s.Client.SetFollowRedirect(request.AllowRedirects)
// * 组合header
var headers map[string]string var headers map[string]string
if request.Headers != nil { if request.Headers != nil {
headers = request.Headers.GetAll() headers = request.Headers.GetAll()
} else { } else {
headers = url.DefaultHeaders if len(s.Headers) != 0 {
headers = s.Headers
} else {
headers = url.DefaultHeaders
}
} }
for k, v := range headers { for k, v := range headers {
req.Header.Set(k, v) req.Header.Set(k, v)
...@@ -227,7 +236,7 @@ func decodeGZip(content *[]byte) error { ...@@ -227,7 +236,7 @@ func decodeGZip(content *[]byte) error {
return err return err
} }
defer r.Close() defer r.Close()
*content, err = ioutil.ReadAll(r) *content, err = io.ReadAll(r)
if err != nil { if err != nil {
return err return err
} }
...@@ -242,7 +251,7 @@ func decodeDeflate(content *[]byte) error { ...@@ -242,7 +251,7 @@ func decodeDeflate(content *[]byte) error {
} }
r := flate.NewReader(bytes.NewReader(*content)) r := flate.NewReader(bytes.NewReader(*content))
defer r.Close() defer r.Close()
*content, err = ioutil.ReadAll(r) *content, err = io.ReadAll(r)
if err != nil { if err != nil {
return err return err
} }
...@@ -256,7 +265,7 @@ func decodeBrotli(content *[]byte) error { ...@@ -256,7 +265,7 @@ func decodeBrotli(content *[]byte) error {
return err return err
} }
r := brotli.NewReader(bytes.NewReader(*content)) r := brotli.NewReader(bytes.NewReader(*content))
*content, err = ioutil.ReadAll(r) *content, err = io.ReadAll(r)
if err != nil { if err != nil {
return err return err
} }
......
...@@ -22,10 +22,10 @@ type Request struct { ...@@ -22,10 +22,10 @@ type Request struct {
Auth []string Auth []string
Timeout time.Duration Timeout time.Duration
AllowRedirects bool AllowRedirects bool
Proxies string
Verify bool Verify bool
ForceHTTP1 bool ForceHTTP1 bool
TlsProfile tls.TlsVersion TlsProfile tls.TlsVersion
Method string Method string
Url string Url string
Proxy string
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment