[refactor]: 添加 CookieGroup (#233)
This commit is contained in:
parent
0c57ab1ed5
commit
99af4a2685
13
client.go
13
client.go
@ -360,7 +360,11 @@ func (c *Client) WebWxUploadMediaByChunk(file *os.File, request *BaseRequest, in
|
|||||||
path.RawQuery = params.Encode()
|
path.RawQuery = params.Encode()
|
||||||
|
|
||||||
cookies := c.Jar().Cookies(path)
|
cookies := c.Jar().Cookies(path)
|
||||||
webWxDataTicket := getWebWxDataTicket(cookies)
|
|
||||||
|
webWxDataTicket, err := getWebWxDataTicket(cookies)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
uploadMediaRequest := map[string]interface{}{
|
uploadMediaRequest := map[string]interface{}{
|
||||||
"UploadType": 2,
|
"UploadType": 2,
|
||||||
@ -593,13 +597,18 @@ func (c *Client) WebWxGetVideo(msg *Message, info *LoginInfo) (*http.Response, e
|
|||||||
// WebWxGetMedia 获取文件消息的文件响应
|
// WebWxGetMedia 获取文件消息的文件响应
|
||||||
func (c *Client) WebWxGetMedia(msg *Message, info *LoginInfo) (*http.Response, error) {
|
func (c *Client) WebWxGetMedia(msg *Message, info *LoginInfo) (*http.Response, error) {
|
||||||
path, _ := url.Parse(c.Domain.FileHost() + webwxgetmedia)
|
path, _ := url.Parse(c.Domain.FileHost() + webwxgetmedia)
|
||||||
|
cookies := c.Jar().Cookies(path)
|
||||||
|
webWxDataTicket, err := getWebWxDataTicket(cookies)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
params := url.Values{}
|
params := url.Values{}
|
||||||
params.Add("sender", msg.FromUserName)
|
params.Add("sender", msg.FromUserName)
|
||||||
params.Add("mediaid", msg.MediaId)
|
params.Add("mediaid", msg.MediaId)
|
||||||
params.Add("encryfilename", msg.EncryFileName)
|
params.Add("encryfilename", msg.EncryFileName)
|
||||||
params.Add("fromuser", strconv.FormatInt(info.WxUin, 10))
|
params.Add("fromuser", strconv.FormatInt(info.WxUin, 10))
|
||||||
params.Add("pass_ticket", info.PassTicket)
|
params.Add("pass_ticket", info.PassTicket)
|
||||||
params.Add("webwx_data_ticket", getWebWxDataTicket(c.Jar().Cookies(path)))
|
params.Add("webwx_data_ticket", webWxDataTicket)
|
||||||
path.RawQuery = params.Encode()
|
path.RawQuery = params.Encode()
|
||||||
req, _ := http.NewRequest(http.MethodGet, path.String(), nil)
|
req, _ := http.NewRequest(http.MethodGet, path.String(), nil)
|
||||||
req.Header.Add("Referer", c.Domain.BaseHost()+"/")
|
req.Header.Add("Referer", c.Domain.BaseHost()+"/")
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Jar is a struct which as same as cookiejar.Jar
|
// Jar is a struct which as same as cookiejar.Jar
|
||||||
|
// cookiejar.Jar's fields are private, so we can't use it directly
|
||||||
type Jar struct {
|
type Jar struct {
|
||||||
PsList cookiejar.PublicSuffixList
|
PsList cookiejar.PublicSuffixList
|
||||||
|
|
||||||
@ -57,3 +58,24 @@ type entry struct {
|
|||||||
// equal Creation time. This simplifies testing.
|
// equal Creation time. This simplifies testing.
|
||||||
seqNum uint64
|
seqNum uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CookieGroup is a group of cookies
|
||||||
|
type CookieGroup []*http.Cookie
|
||||||
|
|
||||||
|
func (c CookieGroup) GetByName(cookieName string) (cookie *http.Cookie, exist bool) {
|
||||||
|
for _, cookie := range c {
|
||||||
|
if cookie.Name == cookieName {
|
||||||
|
return cookie, true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
|
||||||
|
func getWebWxDataTicket(cookies []*http.Cookie) (string, error) {
|
||||||
|
cookieGroup := CookieGroup(cookies)
|
||||||
|
cookie, exist := cookieGroup.GetByName("webwx_data_ticket")
|
||||||
|
if !exist {
|
||||||
|
return "", ErrWebWxDataTicketNotFound
|
||||||
|
}
|
||||||
|
return cookie.Value, nil
|
||||||
|
}
|
@ -32,6 +32,9 @@ var (
|
|||||||
|
|
||||||
// ErrLoginTimeout define login timeout error
|
// ErrLoginTimeout define login timeout error
|
||||||
ErrLoginTimeout = errors.New("login timeout")
|
ErrLoginTimeout = errors.New("login timeout")
|
||||||
|
|
||||||
|
// ErrWebWxDataTicketNotFound define webwx_data_ticket not found error
|
||||||
|
ErrWebWxDataTicketNotFound = errors.New("webwx_data_ticket not found")
|
||||||
)
|
)
|
||||||
|
|
||||||
// Error impl error interface
|
// Error impl error interface
|
||||||
|
@ -38,15 +38,6 @@ func GetRandomDeviceId() string {
|
|||||||
return builder.String()
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func getWebWxDataTicket(cookies []*http.Cookie) string {
|
|
||||||
for _, cookie := range cookies {
|
|
||||||
if cookie.Name == "webwx_data_ticket" {
|
|
||||||
return cookie.Value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetFileContentType 获取文件上传的类型
|
// GetFileContentType 获取文件上传的类型
|
||||||
func GetFileContentType(file multipart.File) (string, error) {
|
func GetFileContentType(file multipart.File) (string, error) {
|
||||||
data := make([]byte, 512)
|
data := make([]byte, 512)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user