1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-05 03:23:49 +08:00

server: refactor http post retry

This commit is contained in:
wdvxdr 2022-03-26 14:39:28 +08:00
parent d161f35c69
commit ee9af5fa69
No known key found for this signature in database
GPG Key ID: 703F8C071DE7A1B6

View File

@ -350,36 +350,32 @@ func (c *HTTPClient) onBotPushEvent(e *coolq.Event) {
header.Set("X-API-Port", strconv.FormatInt(int64(c.apiPort), 10)) header.Set("X-API-Port", strconv.FormatInt(int64(c.apiPort), 10))
} }
var req *http.Request
var res *http.Response var res *http.Response
var err error
for i := uint64(0); i <= c.MaxRetries; i++ { for i := uint64(0); i <= c.MaxRetries; i++ {
// see https://stackoverflow.com/questions/31337891/net-http-http-contentlength-222-with-body-length-0 // see https://stackoverflow.com/questions/31337891/net-http-http-contentlength-222-with-body-length-0
// we should create a new request for every single post trial // we should create a new request for every single post trial
req, err := http.NewRequest("POST", c.addr, bytes.NewReader(e.JSONBytes())) req, err = http.NewRequest("POST", c.addr, bytes.NewReader(e.JSONBytes()))
if err != nil { if err != nil {
log.Warnf("上报 Event 数据到 %v 时创建请求失败: %v", c.addr, err) log.Warnf("上报 Event 数据到 %v 时创建请求失败: %v", c.addr, err)
return return
} }
req.Header = header req.Header = header
res, err = c.client.Do(req) res, err = c.client.Do(req)
if res != nil { if err != nil {
//goland:noinspection GoDeferInLoop if i < c.MaxRetries {
defer res.Body.Close() log.Warnf("上报 Event 数据到 %v 失败: %v 将进行第 %d 次重试", c.addr, err, i+1)
} else {
log.Warnf("上报 Event 数据 %s 到 %v 失败: %v 停止上报:已达重试上限", e.JSONBytes(), c.addr, err)
return
}
time.Sleep(time.Millisecond * time.Duration(c.RetriesInterval))
} }
if err == nil {
break
}
if i < c.MaxRetries {
log.Warnf("上报 Event 数据到 %v 失败: %v 将进行第 %d 次重试", c.addr, err, i+1)
} else {
log.Warnf("上报 Event 数据 %s 到 %v 失败: %v 停止上报:已达重试上线", e.JSONBytes(), c.addr, err)
return
}
time.Sleep(time.Millisecond * time.Duration(c.RetriesInterval))
} }
defer res.Body.Close()
log.Debugf("上报Event数据 %s 到 %v", e.JSONBytes(), c.addr) log.Debugf("上报Event数据 %s 到 %v", e.JSONBytes(), c.addr)
r, err := io.ReadAll(res.Body) r, err := io.ReadAll(res.Body)
if err != nil { if err != nil {
return return