45 lines
767 B
Go
45 lines
767 B
Go
package httpclient
|
||
|
||
import (
|
||
"context"
|
||
"net/http"
|
||
"time"
|
||
)
|
||
|
||
const (
|
||
// DefaultRetryTimes 如果请求失败,最多重试3次
|
||
DefaultRetryTimes = 3
|
||
// DefaultRetryDelay 在重试前,延迟等待100毫秒
|
||
DefaultRetryDelay = time.Millisecond * 100
|
||
)
|
||
|
||
// Verify parse the body and verify that it is correct
|
||
type RetryVerify func(body []byte) (shouldRetry bool)
|
||
|
||
func shouldRetry(ctx context.Context, httpCode int) bool {
|
||
select {
|
||
case <-ctx.Done():
|
||
return false
|
||
default:
|
||
}
|
||
|
||
switch httpCode {
|
||
case
|
||
_StatusReadRespErr,
|
||
_StatusDoReqErr,
|
||
|
||
http.StatusRequestTimeout,
|
||
http.StatusLocked,
|
||
http.StatusTooEarly,
|
||
http.StatusTooManyRequests,
|
||
|
||
http.StatusServiceUnavailable,
|
||
http.StatusGatewayTimeout:
|
||
|
||
return true
|
||
|
||
default:
|
||
return false
|
||
}
|
||
}
|