@@ -38,10 +38,10 @@ var json = jsoniter.ConfigCompatibleWithStandardLibrary
3838
3939// Requester is used to make outbound requests with
4040type Requester interface {
41- Get (... Header ) (response []byte , code int , err error )
41+ Get (... Header ) (response []byte , responseHeaders http. Header , code int , err error )
4242 GetObj (result interface {}, headers ... Header ) error
4343
44- Post (body interface {}, headers ... Header ) (response []byte , code int , err error )
44+ Post (body interface {}, headers ... Header ) (response []byte , responseHeaders http. Header , code int , err error )
4545 PostObj (body interface {}, result interface {}, headers ... Header ) error
4646
4747 String () string
@@ -101,45 +101,45 @@ func NewHTTPRequester(url string, params ...func(*HTTPRequester)) *HTTPRequester
101101
102102// Get executes HTTP GET with url and optional extra headers, returns body in []bytes
103103// url created as url+sdkKey.json
104- func (r HTTPRequester ) Get (headers ... Header ) (response []byte , code int , err error ) {
104+ func (r HTTPRequester ) Get (headers ... Header ) (response []byte , responseHeaders http. Header , code int , err error ) {
105105 return r .Do ("GET" , nil , headers )
106106}
107107
108108// GetObj executes HTTP GET with url and optional extra headers, returns filled object
109109func (r HTTPRequester ) GetObj (result interface {}, headers ... Header ) error {
110- b , _ , err := r .Do ("GET" , nil , headers )
110+ b , _ , _ , err := r .Do ("GET" , nil , headers )
111111 if err != nil {
112112 return err
113113 }
114114 return json .Unmarshal (b , result )
115115}
116116
117117// Post executes HTTP POST with url, body and optional extra headers
118- func (r HTTPRequester ) Post (body interface {}, headers ... Header ) (response []byte , code int , err error ) {
118+ func (r HTTPRequester ) Post (body interface {}, headers ... Header ) (response []byte , responseHeaders http. Header , code int , err error ) {
119119 b , err := json .Marshal (body )
120120 if err != nil {
121- return nil , 400 , err
121+ return nil , nil , http . StatusBadRequest , err
122122 }
123123 return r .Do ("POST" , bytes .NewBuffer (b ), headers )
124124}
125125
126126// PostObj executes HTTP POST with uri, body and optional extra headers. Returns filled object
127127func (r HTTPRequester ) PostObj (body , result interface {}, headers ... Header ) error {
128- b , _ , err := r .Post (body , headers ... )
128+ b , _ , _ , err := r .Post (body , headers ... )
129129 if err != nil {
130130 return err
131131 }
132132 return json .Unmarshal (b , result )
133133}
134134
135135// Do executes request and returns response body for requested uri (sdkKey.json).
136- func (r HTTPRequester ) Do (method string , body io.Reader , headers []Header ) (response []byte , code int , err error ) {
136+ func (r HTTPRequester ) Do (method string , body io.Reader , headers []Header ) (response []byte , responseHeaders http. Header , code int , err error ) {
137137
138- single := func (request * http.Request ) (response []byte , code int , e error ) {
138+ single := func (request * http.Request ) (response []byte , responseHeaders http. Header , code int , e error ) {
139139 resp , doErr := r .client .Do (request )
140140 if doErr != nil {
141141 requesterLogger .Error (fmt .Sprintf ("failed to send request %v" , request ), e )
142- return nil , 0 , doErr
142+ return nil , http. Header {}, 0 , doErr
143143 }
144144 defer func () {
145145 if e := resp .Body .Close (); e != nil {
@@ -149,35 +149,35 @@ func (r HTTPRequester) Do(method string, body io.Reader, headers []Header) (resp
149149
150150 if response , err = ioutil .ReadAll (resp .Body ); err != nil {
151151 requesterLogger .Error ("failed to read body" , err )
152- return nil , resp .StatusCode , err
152+ return nil , resp .Header , resp . StatusCode , err
153153 }
154154
155- if resp .StatusCode >= 400 {
155+ if resp .StatusCode >= http . StatusBadRequest {
156156 requesterLogger .Warning (fmt .Sprintf ("error status code=%d" , resp .StatusCode ))
157- return response , resp .StatusCode , errors .New (resp .Status )
157+ return response , resp .Header , resp . StatusCode , errors .New (resp .Status )
158158 }
159159
160- return response , resp .StatusCode , nil
160+ return response , resp .Header , resp . StatusCode , nil
161161 }
162162
163163 requesterLogger .Debug (fmt .Sprintf ("request %s" , r .url ))
164164 req , err := http .NewRequest (method , r .url , body )
165165 if err != nil {
166166 requesterLogger .Error (fmt .Sprintf ("failed to make request %s" , r .url ), err )
167- return nil , 0 , err
167+ return nil , nil , 0 , err
168168 }
169169
170170 r .addHeaders (req , headers )
171171
172172 for i := 0 ; i < r .retries ; i ++ {
173173
174- if response , code , err = single (req ); err == nil {
174+ if response , responseHeaders , code , err = single (req ); err == nil {
175175 triedMsg := ""
176176 if i > 0 {
177177 triedMsg = fmt .Sprintf (", tried %d time(s)" , i + 1 )
178178 }
179179 requesterLogger .Debug (fmt .Sprintf ("completed %s%s" , r .url , triedMsg ))
180- return response , code , err
180+ return response , responseHeaders , code , err
181181 }
182182 requesterLogger .Debug (fmt .Sprintf ("failed %s with %v" , r .url , err ))
183183
@@ -187,7 +187,7 @@ func (r HTTPRequester) Do(method string, body io.Reader, headers []Header) (resp
187187 }
188188 }
189189
190- return response , code , err
190+ return response , responseHeaders , code , err
191191}
192192
193193func (r HTTPRequester ) addHeaders (req * http.Request , headers []Header ) * http.Request {
0 commit comments