Retry-After support

This commit is contained in:
Ian Gulliver
2021-09-28 04:43:38 +00:00
parent 5f61b928f8
commit d82b945668
2 changed files with 22 additions and 1 deletions

View File

@@ -1,5 +1,7 @@
package client
import "net/http"
import "strconv"
import "sync"
import "time"
@@ -49,7 +51,21 @@ func (rl *RateLimit) AcquireN(cost float64) {
}
}
// Handle a Retry-After server response
func (rl *RateLimit) MaybeRetryAfter(resp *http.Response) error {
header := resp.Header.Get("Retry-After")
if header == "" {
return nil
}
retryAfter, err := strconv.ParseInt(header, 10, 64)
if err != nil {
return err
}
rl.RetryAfter(retryAfter)
return nil
}
func (rl *RateLimit) RetryAfter(seconds int64) {
rl.mu.Lock()
defer rl.mu.Unlock()