[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()
|
||||
|
||||
cookies := c.Jar().Cookies(path)
|
||||
webWxDataTicket := getWebWxDataTicket(cookies)
|
||||
|
||||
webWxDataTicket, err := getWebWxDataTicket(cookies)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
uploadMediaRequest := map[string]interface{}{
|
||||
"UploadType": 2,
|
||||
@ -593,13 +597,18 @@ func (c *Client) WebWxGetVideo(msg *Message, info *LoginInfo) (*http.Response, e
|
||||
// WebWxGetMedia 获取文件消息的文件响应
|
||||
func (c *Client) WebWxGetMedia(msg *Message, info *LoginInfo) (*http.Response, error) {
|
||||
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.Add("sender", msg.FromUserName)
|
||||
params.Add("mediaid", msg.MediaId)
|
||||
params.Add("encryfilename", msg.EncryFileName)
|
||||
params.Add("fromuser", strconv.FormatInt(info.WxUin, 10))
|
||||
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()
|
||||
req, _ := http.NewRequest(http.MethodGet, path.String(), nil)
|
||||
req.Header.Add("Referer", c.Domain.BaseHost()+"/")
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
)
|
||||
|
||||
// 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 {
|
||||
PsList cookiejar.PublicSuffixList
|
||||
|
||||
@ -57,3 +58,24 @@ type entry struct {
|
||||
// equal Creation time. This simplifies testing.
|
||||
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 = errors.New("login timeout")
|
||||
|
||||
// ErrWebWxDataTicketNotFound define webwx_data_ticket not found error
|
||||
ErrWebWxDataTicketNotFound = errors.New("webwx_data_ticket not found")
|
||||
)
|
||||
|
||||
// Error impl error interface
|
||||
|
@ -38,15 +38,6 @@ func GetRandomDeviceId() 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 获取文件上传的类型
|
||||
func GetFileContentType(file multipart.File) (string, error) {
|
||||
data := make([]byte, 512)
|
||||
|
Loading…
x
Reference in New Issue
Block a user