This commit is contained in:
gospider
2024-12-01 09:44:59 +08:00
parent dde0d9bf0f
commit 179dd44b56
3 changed files with 31 additions and 34 deletions

View File

@@ -91,26 +91,6 @@ func ReadCookies(val any) (Cookies, error) {
return any2Cookies(cook) return any2Cookies(cook)
} }
} }
// read set cookies or parse set cookies,support json,map,[]string,http.Header,string
//
// func ReadSetCookies(val any) (Cookies, error) {
// switch cook := val.(type) {
// case Cookies:
// return cook, nil
// case []*http.Cookie:
// return Cookies(cook), nil
// case string:
// http.ParseCookie()
// return http.ParseSetCookie(cook)
// case http.Header:
// return readSetCookies(cook), nil
// case []string:
// return readSetCookies(http.Header{"Set-Cookie": cook}), nil
// default:
// return any2Cookies(cook)
// }
// }
func any2Cookies(val any) (Cookies, error) { func any2Cookies(val any) (Cookies, error) {
switch cooks := val.(type) { switch cooks := val.(type) {
case map[string]string: case map[string]string:

39
jar.go
View File

@@ -8,15 +8,21 @@ import (
"golang.org/x/net/publicsuffix" "golang.org/x/net/publicsuffix"
) )
type Jar interface { // size=8
ClearCookies()
GetCookies(u *url.URL) Cookies
SetCookies(*url.URL, Cookies)
}
// cookies jar // cookies jar
type Jar struct { type jar struct {
jar *cookiejar.Jar jar *cookiejar.Jar
} }
// new cookies jar // new cookies jar
func NewJar() *Jar { func NewJar() *jar {
j, _ := cookiejar.New(nil) j, _ := cookiejar.New(nil)
return &Jar{ return &jar{
jar: j, jar: j,
} }
} }
@@ -34,7 +40,12 @@ func (obj *Client) SetCookies(href *url.URL, cookies ...any) error {
if obj.option.Jar == nil { if obj.option.Jar == nil {
return nil return nil
} }
return obj.option.Jar.SetCookies(href, cookies...) cooks, err := any2cookies(href, cookies...)
if err != nil {
return err
}
obj.option.Jar.SetCookies(href, cooks)
return nil
} }
// clear cookies // clear cookies
@@ -46,7 +57,7 @@ func (obj *Client) ClearCookies() {
} }
// Get cookies // Get cookies
func (obj *Jar) GetCookies(u *url.URL) Cookies { func (obj *jar) GetCookies(u *url.URL) Cookies {
return obj.jar.Cookies(u) return obj.jar.Cookies(u)
} }
func getDomain(u *url.URL) string { func getDomain(u *url.URL) string {
@@ -58,14 +69,13 @@ func getDomain(u *url.URL) string {
} }
return domain return domain
} }
func any2cookies(u *url.URL, cookies ...any) (Cookies, error) {
// Set cookies
func (obj *Jar) SetCookies(u *url.URL, cookies ...any) error {
domain := getDomain(u) domain := getDomain(u)
var result Cookies
for _, cookie := range cookies { for _, cookie := range cookies {
cooks, err := ReadCookies(cookie) cooks, err := ReadCookies(cookie)
if err != nil { if err != nil {
return err return cooks, err
} }
for _, cook := range cooks { for _, cook := range cooks {
if cook.Path == "" { if cook.Path == "" {
@@ -75,13 +85,18 @@ func (obj *Jar) SetCookies(u *url.URL, cookies ...any) error {
cook.Domain = domain cook.Domain = domain
} }
} }
obj.jar.SetCookies(u, cooks) result = append(result, cooks...)
} }
return nil return result, nil
}
// Set cookies
func (obj *jar) SetCookies(u *url.URL, cookies Cookies) {
obj.jar.SetCookies(u, cookies)
} }
// Clear cookies // Clear cookies
func (obj *Jar) ClearCookies() { func (obj *jar) ClearCookies() {
jar, _ := cookiejar.New(nil) jar, _ := cookiejar.New(nil)
obj.jar = jar obj.jar = jar
} }

View File

@@ -76,11 +76,12 @@ type ClientOption struct {
LocalAddr *net.TCPAddr LocalAddr *net.TCPAddr
Dns *net.UDPAddr //dns Dns *net.UDPAddr //dns
AddrType gtls.AddrType //dns parse addr type AddrType gtls.AddrType //dns parse addr type
Jar *Jar //custom cookies Jar Jar //custom cookies
TlsConfig *tls.Config TlsConfig *tls.Config
UtlsConfig *utls.Config UtlsConfig *utls.Config
//other option //other option
UserAgent string //headers User-Agent value
GetProxy func(ctx context.Context, url *url.URL) (string, error) //proxy callback:support https,http,socks5 proxy GetProxy func(ctx context.Context, url *url.URL) (string, error) //proxy callback:support https,http,socks5 proxy
GetAddrType func(host string) gtls.AddrType GetAddrType func(host string) gtls.AddrType
} }
@@ -118,7 +119,7 @@ type RequestOption struct {
LocalAddr *net.TCPAddr LocalAddr *net.TCPAddr
Dns *net.UDPAddr //dns Dns *net.UDPAddr //dns
AddrType gtls.AddrType //dns parse addr type //tls timeout,default:15 AddrType gtls.AddrType //dns parse addr type //tls timeout,default:15
Jar *Jar //custom cookies Jar Jar //custom cookies
TlsConfig *tls.Config TlsConfig *tls.Config
UtlsConfig *utls.Config UtlsConfig *utls.Config
@@ -128,6 +129,7 @@ type RequestOption struct {
Host string Host string
Referer string //set headers referer value Referer string //set headers referer value
ContentType string //headers Content-Type value ContentType string //headers Content-Type value
UserAgent string //headers User-Agent value
Cookies any // cookies,support :json,map,strhttp.Header Cookies any // cookies,support :json,map,strhttp.Header
Params any //url paramsjoin url query,json,map Params any //url paramsjoin url query,json,map