arikawa/httputil/http.go

37 lines
671 B
Go

package httputil
import "net/http"
type TransportWrapper struct {
http.RoundTripper
Pre func(*http.Request) error
Post func(*http.Response) error
}
func NewTransportWrapper() *TransportWrapper {
return &TransportWrapper{
RoundTripper: http.DefaultTransport,
Pre: func(*http.Request) error { return nil },
Post: func(*http.Response) error { return nil },
}
}
func (c *TransportWrapper) RoundTrip(req *http.Request) (*http.Response, error) {
if err := c.Pre(req); err != nil {
return nil, err
}
r, err := c.RoundTripper.RoundTrip(req)
if err != nil {
return nil, err
}
if err := c.Post(r); err != nil {
return nil, err
}
return r, nil
}