@@ -149,13 +149,14 @@ const (
149149)
150150
151151// VERSION is current package version
152- const VERSION = "12 .0.0"
152+ const VERSION = "13 .0.0"
153153
154154// ////////////////////////////////////////////////////////////////////////////////// //
155155
156156type API struct {
157- Info * Info
158- Client * fasthttp.Client
157+ RequestTimeout time.Duration
158+ Info * Info
159+ Client * fasthttp.Client
159160}
160161
161162type AnalyzeParams struct {
@@ -506,8 +507,21 @@ type HTTPHeader struct {
506507 Value string `json:"value"`
507508}
508509
509- // RequestTimeout is request timeout in seconds
510- var RequestTimeout = 10.0
510+ // ////////////////////////////////////////////////////////////////////////////////// //
511+
512+ type HTTPError struct {
513+ StatusCode int
514+ ResponseData string
515+ }
516+
517+ func (e * HTTPError ) Error () string {
518+ return fmt .Sprintf ("API returned HTTP code %d" , e .StatusCode )
519+ }
520+
521+ // ////////////////////////////////////////////////////////////////////////////////// //
522+
523+ // RequestTimeout is default request timeout
524+ var RequestTimeout = 10 * time .Second
511525
512526// ////////////////////////////////////////////////////////////////////////////////// //
513527
@@ -518,11 +532,10 @@ func NewAPI(app, version string) (*API, error) {
518532 }
519533
520534 api := & API {
535+ RequestTimeout : RequestTimeout ,
521536 Client : & fasthttp.Client {
522537 Name : getUserAgent (app , version ),
523538 MaxIdleConnDuration : 5 * time .Second ,
524- ReadTimeout : time .Duration (RequestTimeout ) * time .Second ,
525- WriteTimeout : time .Duration (RequestTimeout ) * time .Second ,
526539 MaxConnsPerHost : 100 ,
527540 },
528541 }
@@ -624,6 +637,8 @@ func (ap *AnalyzeProgress) GetEndpointInfo(ip string, fromCache bool) (*Endpoint
624637
625638// doRequest sends request through http client
626639func (api * API ) doRequest (uri string , result interface {}) error {
640+ var err error
641+
627642 req := fasthttp .AcquireRequest ()
628643 resp := fasthttp .AcquireResponse ()
629644
@@ -632,7 +647,11 @@ func (api *API) doRequest(uri string, result interface{}) error {
632647 defer fasthttp .ReleaseRequest (req )
633648 defer fasthttp .ReleaseResponse (resp )
634649
635- err := api .Client .Do (req , resp )
650+ if api .RequestTimeout == 0 {
651+ err = api .Client .Do (req , resp )
652+ } else {
653+ err = api .Client .DoTimeout (req , resp , api .RequestTimeout )
654+ }
636655
637656 if err != nil {
638657 return err
@@ -641,7 +660,7 @@ func (api *API) doRequest(uri string, result interface{}) error {
641660 statusCode := resp .StatusCode ()
642661
643662 if statusCode != 200 {
644- return fmt . Errorf ( "API return HTTP code %d" , statusCode )
663+ return & HTTPError { StatusCode : statusCode , ResponseData : resp . String ()}
645664 }
646665
647666 if result == nil {
0 commit comments