mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-07 20:45:53 +08:00
feat: add config sign-server-timeout
This commit is contained in:
parent
7adbbd6f81
commit
7c813f8579
@ -278,7 +278,7 @@ func energy(uin uint64, id string, _ string, salt []byte) ([]byte, error) {
|
|||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
URL: signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v&uin=%v&android_id=%v&guid=%v",
|
URL: signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v&uin=%v&android_id=%v&guid=%v",
|
||||||
id, hex.EncodeToString(salt), uin, utils.B2S(device.AndroidId), hex.EncodeToString(device.Guid)),
|
id, hex.EncodeToString(salt), uin, utils.B2S(device.AndroidId), hex.EncodeToString(device.Guid)),
|
||||||
}
|
}.WithTimeout(time.Duration(base.SignServerTimeout) * time.Second)
|
||||||
if base.IsBelow110 {
|
if base.IsBelow110 {
|
||||||
req.URL = signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v", id, hex.EncodeToString(salt))
|
req.URL = signServer + "custom_energy" + fmt.Sprintf("?data=%v&salt=%v", id, hex.EncodeToString(salt))
|
||||||
}
|
}
|
||||||
@ -312,7 +312,7 @@ func signSubmit(uin string, cmd string, callbackID int64, buffer []byte, t strin
|
|||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
URL: signServer + "submit" + fmt.Sprintf("?uin=%v&cmd=%v&callback_id=%v&buffer=%v",
|
URL: signServer + "submit" + fmt.Sprintf("?uin=%v&cmd=%v&callback_id=%v&buffer=%v",
|
||||||
uin, cmd, callbackID, buffStr),
|
uin, cmd, callbackID, buffStr),
|
||||||
}.Bytes()
|
}.WithTimeout(time.Duration(base.SignServerTimeout) * time.Second).Bytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("提交 callback 时出现错误: %v server: %v", err, signServer)
|
log.Warnf("提交 callback 时出现错误: %v server: %v", err, signServer)
|
||||||
}
|
}
|
||||||
@ -343,7 +343,7 @@ func signRequset(seq uint64, uin string, cmd string, qua string, buff []byte) (s
|
|||||||
Header: map[string]string{"Content-Type": "application/x-www-form-urlencoded"},
|
Header: map[string]string{"Content-Type": "application/x-www-form-urlencoded"},
|
||||||
Body: bytes.NewReader([]byte(fmt.Sprintf("uin=%v&qua=%s&cmd=%s&seq=%v&buffer=%v&android_id=%v&guid=%v",
|
Body: bytes.NewReader([]byte(fmt.Sprintf("uin=%v&qua=%s&cmd=%s&seq=%v&buffer=%v&android_id=%v&guid=%v",
|
||||||
uin, qua, cmd, seq, hex.EncodeToString(buff), utils.B2S(device.AndroidId), hex.EncodeToString(device.Guid)))),
|
uin, qua, cmd, seq, hex.EncodeToString(buff), utils.B2S(device.AndroidId), hex.EncodeToString(device.Guid)))),
|
||||||
}.Bytes()
|
}.WithTimeout(time.Duration(base.SignServerTimeout) * time.Second).Bytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
@ -371,7 +371,7 @@ func signRegister(uin int64, androidID, guid []byte, qimei36, key string) {
|
|||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
URL: signServer + "register" + fmt.Sprintf("?uin=%v&android_id=%v&guid=%v&qimei36=%v&key=%s",
|
URL: signServer + "register" + fmt.Sprintf("?uin=%v&android_id=%v&guid=%v&qimei36=%v&key=%s",
|
||||||
uin, utils.B2S(androidID), hex.EncodeToString(guid), qimei36, key),
|
uin, utils.B2S(androidID), hex.EncodeToString(guid), qimei36, key),
|
||||||
}.Bytes()
|
}.WithTimeout(time.Duration(base.SignServerTimeout) * time.Second).Bytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("注册QQ实例时出现错误: %v server: %v", err, signServer)
|
log.Warnf("注册QQ实例时出现错误: %v server: %v", err, signServer)
|
||||||
return
|
return
|
||||||
@ -393,7 +393,7 @@ func signRefreshToken(uin string) error {
|
|||||||
resp, err := download.Request{
|
resp, err := download.Request{
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
URL: signServer + "request_token" + fmt.Sprintf("?uin=%v", uin),
|
URL: signServer + "request_token" + fmt.Sprintf("?uin=%v", uin),
|
||||||
}.Bytes()
|
}.WithTimeout(time.Duration(base.SignServerTimeout) * time.Second).Bytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -463,7 +463,7 @@ func signServerDestroy(uin string) error {
|
|||||||
resp, err := download.Request{
|
resp, err := download.Request{
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
URL: signServer + "destroy" + fmt.Sprintf("?uin=%v&key=%v", uin, base.Key),
|
URL: signServer + "destroy" + fmt.Sprintf("?uin=%v&key=%v", uin, base.Key),
|
||||||
}.Bytes()
|
}.WithTimeout(time.Duration(base.SignServerTimeout) * time.Second).Bytes()
|
||||||
if err != nil || gjson.GetBytes(resp, "code").Int() != 0 {
|
if err != nil || gjson.GetBytes(resp, "code").Int() != 0 {
|
||||||
return errors.Wrapf(err, "destroy 实例出现错误, server: %v", signServer)
|
return errors.Wrapf(err, "destroy 实例出现错误, server: %v", signServer)
|
||||||
}
|
}
|
||||||
@ -475,7 +475,7 @@ func signVersion() (version string, err error) {
|
|||||||
resp, err := download.Request{
|
resp, err := download.Request{
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
URL: signServer,
|
URL: signServer,
|
||||||
}.Bytes()
|
}.WithTimeout(time.Duration(base.SignServerTimeout) * time.Second).Bytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -166,7 +166,6 @@ func LoginInteract() {
|
|||||||
|
|
||||||
if base.SignServer != "-" && base.SignServer != "" {
|
if base.SignServer != "-" && base.SignServer != "" {
|
||||||
log.Infof("使用服务器 %s 进行数据包签名", base.SignServer)
|
log.Infof("使用服务器 %s 进行数据包签名", base.SignServer)
|
||||||
download.SetTimeout(time.Duration(base.HTTPTimeout) * time.Second) // 设置签名超时时间
|
|
||||||
// 等待签名服务器直到连接成功
|
// 等待签名服务器直到连接成功
|
||||||
if !signWaitServer() {
|
if !signWaitServer() {
|
||||||
log.Fatalf("连接签名服务器失败")
|
log.Fatalf("连接签名服务器失败")
|
||||||
@ -304,9 +303,9 @@ func LoginInteract() {
|
|||||||
cli.Uin = base.Account.Uin
|
cli.Uin = base.Account.Uin
|
||||||
cli.PasswordMd5 = base.PasswordHash
|
cli.PasswordMd5 = base.PasswordHash
|
||||||
}
|
}
|
||||||
|
download.SetTimeout(time.Duration(base.HTTPTimeout) * time.Second)
|
||||||
if !base.FastStart {
|
if !base.FastStart {
|
||||||
log.Infof("正在检查协议更新...")
|
log.Infof("正在检查协议更新...")
|
||||||
download.SetTimeout(time.Second * 5) // 防止协议更新堵塞过久
|
|
||||||
currentVersionName := device.Protocol.Version().SortVersionName
|
currentVersionName := device.Protocol.Version().SortVersionName
|
||||||
remoteVersion, err := getRemoteLatestProtocolVersion(int(device.Protocol.Version().Protocol))
|
remoteVersion, err := getRemoteLatestProtocolVersion(int(device.Protocol.Version().Protocol))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -391,7 +390,6 @@ func LoginInteract() {
|
|||||||
})
|
})
|
||||||
saveToken()
|
saveToken()
|
||||||
cli.AllowSlider = true
|
cli.AllowSlider = true
|
||||||
download.SetTimeout(time.Duration(base.HTTPTimeout) * time.Second) // 登陆完成进行最终超时设置
|
|
||||||
log.Infof("登录成功 欢迎使用: %v", cli.Nickname)
|
log.Infof("登录成功 欢迎使用: %v", cli.Nickname)
|
||||||
log.Info("开始加载好友列表...")
|
log.Info("开始加载好友列表...")
|
||||||
global.Check(cli.ReloadFriendList(), true)
|
global.Check(cli.ReloadFriendList(), true)
|
||||||
|
@ -41,7 +41,8 @@ var (
|
|||||||
SignServer string // 使用特定的服务器进行签名
|
SignServer string // 使用特定的服务器进行签名
|
||||||
Key string // 签名服务器密钥
|
Key string // 签名服务器密钥
|
||||||
IsBelow110 bool // 签名服务器版本是否低于1.1.0及以下
|
IsBelow110 bool // 签名服务器版本是否低于1.1.0及以下
|
||||||
HTTPTimeout int
|
HTTPTimeout int // download 超时时间
|
||||||
|
SignServerTimeout int // 签名服务器超时时间
|
||||||
|
|
||||||
PostFormat string // 上报格式 string or array
|
PostFormat string // 上报格式 string or array
|
||||||
Proxy string // 存储 proxy_rewrite,用于设置代理
|
Proxy string // 存储 proxy_rewrite,用于设置代理
|
||||||
@ -94,6 +95,7 @@ func Init() {
|
|||||||
Key = conf.Account.Key
|
Key = conf.Account.Key
|
||||||
IsBelow110 = conf.Account.IsBelow110
|
IsBelow110 = conf.Account.IsBelow110
|
||||||
HTTPTimeout = conf.Message.HTTPTimeout
|
HTTPTimeout = conf.Message.HTTPTimeout
|
||||||
|
SignServerTimeout = conf.Message.SignServerTimeout
|
||||||
}
|
}
|
||||||
{ // others
|
{ // others
|
||||||
Proxy = conf.Message.ProxyRewrite
|
Proxy = conf.Message.ProxyRewrite
|
||||||
|
@ -21,20 +21,7 @@ import (
|
|||||||
"github.com/Mrs4s/go-cqhttp/internal/base"
|
"github.com/Mrs4s/go-cqhttp/internal/base"
|
||||||
)
|
)
|
||||||
|
|
||||||
var client = &http.Client{
|
var client = newcli(time.Second * 15)
|
||||||
Transport: &http.Transport{
|
|
||||||
Proxy: func(request *http.Request) (*url.URL, error) {
|
|
||||||
if base.Proxy == "" {
|
|
||||||
return http.ProxyFromEnvironment(request)
|
|
||||||
}
|
|
||||||
return url.Parse(base.Proxy)
|
|
||||||
},
|
|
||||||
// Disable http2
|
|
||||||
TLSNextProto: map[string]func(authority string, c *tls.Conn) http.RoundTripper{},
|
|
||||||
MaxIdleConnsPerHost: 999,
|
|
||||||
},
|
|
||||||
Timeout: time.Minute,
|
|
||||||
}
|
|
||||||
|
|
||||||
var clienth2 = &http.Client{
|
var clienth2 = &http.Client{
|
||||||
Transport: &http.Transport{
|
Transport: &http.Transport{
|
||||||
@ -50,12 +37,35 @@ var clienth2 = &http.Client{
|
|||||||
Timeout: time.Second * 15,
|
Timeout: time.Second * 15,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func newcli(t time.Duration) *http.Client {
|
||||||
|
return &http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
Proxy: func(request *http.Request) (*url.URL, error) {
|
||||||
|
if base.Proxy == "" {
|
||||||
|
return http.ProxyFromEnvironment(request)
|
||||||
|
}
|
||||||
|
return url.Parse(base.Proxy)
|
||||||
|
},
|
||||||
|
// Disable http2
|
||||||
|
TLSNextProto: map[string]func(authority string, c *tls.Conn) http.RoundTripper{},
|
||||||
|
MaxIdleConnsPerHost: 999,
|
||||||
|
},
|
||||||
|
Timeout: t,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ErrOverSize 响应主体过大时返回此错误
|
// ErrOverSize 响应主体过大时返回此错误
|
||||||
var ErrOverSize = errors.New("oversize")
|
var ErrOverSize = errors.New("oversize")
|
||||||
|
|
||||||
// UserAgent HTTP请求时使用的UA
|
// UserAgent HTTP请求时使用的UA
|
||||||
const UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66"
|
const UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66"
|
||||||
|
|
||||||
|
// WithTimeout get a download instance with timeout t
|
||||||
|
func (r Request) WithTimeout(t time.Duration) *Request {
|
||||||
|
r.custcli = newcli(t)
|
||||||
|
return &r
|
||||||
|
}
|
||||||
|
|
||||||
// SetTimeout set internal/download client timeout
|
// SetTimeout set internal/download client timeout
|
||||||
func SetTimeout(t time.Duration) {
|
func SetTimeout(t time.Duration) {
|
||||||
if t == 0 {
|
if t == 0 {
|
||||||
@ -67,14 +77,18 @@ func SetTimeout(t time.Duration) {
|
|||||||
|
|
||||||
// Request is a file download request
|
// Request is a file download request
|
||||||
type Request struct {
|
type Request struct {
|
||||||
Method string
|
Method string
|
||||||
URL string
|
URL string
|
||||||
Header map[string]string
|
Header map[string]string
|
||||||
Limit int64
|
Limit int64
|
||||||
Body io.Reader
|
Body io.Reader
|
||||||
|
custcli *http.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r Request) client() *http.Client {
|
func (r Request) client() *http.Client {
|
||||||
|
if r.custcli != nil {
|
||||||
|
return r.custcli
|
||||||
|
}
|
||||||
if strings.Contains(r.URL, "go-cqhttp.org") {
|
if strings.Contains(r.URL, "go-cqhttp.org") {
|
||||||
return clienth2
|
return clienth2
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,7 @@ type Config struct {
|
|||||||
SkipMimeScan bool `yaml:"skip-mime-scan"`
|
SkipMimeScan bool `yaml:"skip-mime-scan"`
|
||||||
ConvertWebpImage bool `yaml:"convert-webp-image"`
|
ConvertWebpImage bool `yaml:"convert-webp-image"`
|
||||||
HTTPTimeout int `yaml:"http-timeout"`
|
HTTPTimeout int `yaml:"http-timeout"`
|
||||||
|
SignServerTimeout int `yaml:"sign-server-timeout"`
|
||||||
} `yaml:"message"`
|
} `yaml:"message"`
|
||||||
|
|
||||||
Output struct {
|
Output struct {
|
||||||
|
@ -70,8 +70,10 @@ message:
|
|||||||
skip-mime-scan: false
|
skip-mime-scan: false
|
||||||
# 是否自动转换 WebP 图片
|
# 是否自动转换 WebP 图片
|
||||||
convert-webp-image: false
|
convert-webp-image: false
|
||||||
# http超时时间,同时作为签名服务超时时间
|
# download 超时时间(s)
|
||||||
http-timeout: 0
|
http-timeout: 15
|
||||||
|
# 签名服务超时时间(s)
|
||||||
|
sign-server-timeout: 60
|
||||||
|
|
||||||
output:
|
output:
|
||||||
# 日志等级 trace,debug,info,warn,error
|
# 日志等级 trace,debug,info,warn,error
|
||||||
|
Loading…
x
Reference in New Issue
Block a user