Files
requests/jar.go
2023-09-19 10:24:48 +08:00

79 lines
1.5 KiB
Go

package requests
import (
"errors"
"net/http/cookiejar"
"net/url"
"golang.org/x/net/publicsuffix"
)
type Jar struct {
jar *cookiejar.Jar
}
func NewJar() *Jar {
jar, _ := cookiejar.New(nil)
return &Jar{
jar: jar,
}
}
// 返回url 的cookies,也可以设置url 的cookies
func (obj *Client) GetCookies(href string) (Cookies, error) {
return obj.jar.GetCookies(href)
}
func (obj *Client) SetCookies(href string, cookies ...any) error {
return obj.jar.SetCookies(href, cookies...)
}
// 清除cookies
func (obj *Client) ClearCookies() {
if obj.client.Jar != nil {
obj.jar.ClearCookies()
obj.client.Jar = obj.jar.jar
}
}
func (obj *Jar) GetCookies(href string) (Cookies, error) {
if obj.jar == nil {
return nil, errors.New("jar is nil")
}
u, err := url.Parse(href)
if err != nil {
return nil, err
}
return obj.jar.Cookies(u), nil
}
func (obj *Jar) SetCookies(href string, cookies ...any) error {
if obj.jar == nil {
return errors.New("jar is nil")
}
u, err := url.Parse(href)
if err != nil {
return err
}
for _, cookie := range cookies {
cooks, err := ReadCookies(cookie)
if err != nil {
return err
}
for _, cook := range cooks {
if cook.Path == "" {
cook.Path = "/"
}
if cook.Domain == "" {
cook.Domain, err = publicsuffix.EffectiveTLDPlusOne(u.Hostname())
if err != nil {
return err
}
}
}
obj.jar.SetCookies(u, cooks)
}
return nil
}
func (obj *Jar) ClearCookies() {
jar, _ := cookiejar.New(nil)
obj.jar = jar
}