Compare commits
No commits in common. "0797ab1b4be609188732de2141ac68ce1705b56f" and "a545116f522c2d215fbfe53d5845d3888a04238d" have entirely different histories.
0797ab1b4b
...
a545116f52
|
@ -7,7 +7,6 @@ import (
|
|||
"fmt"
|
||||
"git.makemake.in/kzkzzzz/mycommon/mylog"
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"golang.org/x/time/rate"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
@ -65,13 +64,11 @@ type Request struct {
|
|||
urlQuery url.Values
|
||||
httpClient *HttpClient
|
||||
contentType string
|
||||
noWaitQps bool
|
||||
}
|
||||
|
||||
type HttpClient struct {
|
||||
config *Config
|
||||
client *http.Client
|
||||
qpsLimiter *rate.Limiter
|
||||
config *Config
|
||||
client *http.Client
|
||||
}
|
||||
|
||||
func New(opts ...ConfigOpt) *HttpClient {
|
||||
|
@ -106,12 +103,6 @@ func New(opts ...ConfigOpt) *HttpClient {
|
|||
client: config.client,
|
||||
}
|
||||
|
||||
if config.qpsLimiter == nil {
|
||||
hc.qpsLimiter = config.qpsLimiter
|
||||
} else if config.qps > 0 {
|
||||
hc.qpsLimiter = rate.NewLimiter(rate.Every(time.Second/time.Duration(config.qps)), config.qps)
|
||||
}
|
||||
|
||||
return hc
|
||||
}
|
||||
|
||||
|
@ -197,11 +188,6 @@ func (r *Request) SetHeaders(headers map[string]string) *Request {
|
|||
return r
|
||||
}
|
||||
|
||||
func (r *Request) NoWaitQps() *Request {
|
||||
r.noWaitQps = true
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *Request) Get(rawUrl string) (*Response, error) {
|
||||
return r.Do(http.MethodGet, rawUrl)
|
||||
}
|
||||
|
@ -210,23 +196,7 @@ func (r *Request) Post(rawUrl string) (*Response, error) {
|
|||
return r.Do(http.MethodPost, rawUrl)
|
||||
}
|
||||
|
||||
var QpsLimitError = fmt.Errorf("qps limit")
|
||||
|
||||
func (r *Request) Do(method, rawUrl string) (*Response, error) {
|
||||
if r.httpClient.qpsLimiter != nil {
|
||||
if r.noWaitQps {
|
||||
allow := r.httpClient.qpsLimiter.Allow()
|
||||
if !allow {
|
||||
return nil, QpsLimitError
|
||||
}
|
||||
} else {
|
||||
err := r.httpClient.qpsLimiter.Wait(r.ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
reqUrl, err := url.Parse(rawUrl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package httpc
|
||||
|
||||
import (
|
||||
"golang.org/x/time/rate"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
@ -13,8 +12,6 @@ type (
|
|||
transport *http.Transport
|
||||
redirectFn func(req *http.Request, via []*http.Request) error
|
||||
noCheckStatus bool
|
||||
qps int
|
||||
qpsLimiter *rate.Limiter
|
||||
}
|
||||
|
||||
ConfigOpt func(c *Config)
|
||||
|
@ -57,15 +54,3 @@ func WithNoCheckStatus(v bool) ConfigOpt {
|
|||
c.noCheckStatus = v
|
||||
}
|
||||
}
|
||||
|
||||
func WithQps(v int) ConfigOpt {
|
||||
return func(c *Config) {
|
||||
c.qps = v
|
||||
}
|
||||
}
|
||||
|
||||
func WithQpsLimiter(v *rate.Limiter) ConfigOpt {
|
||||
return func(c *Config) {
|
||||
c.qpsLimiter = v
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue