go-httpclient: github.com/mreiferson/go-httpclient Index | Files

package httpclient

import "github.com/mreiferson/go-httpclient"

Provides an HTTP Transport that implements the `RoundTripper` interface and can be used as a built in replacement for the standard library's, providing:

* connection timeouts
* request timeouts

This is a thin wrapper around `http.Transport` that sets dial timeouts and uses Go's internal timer scheduler to call the Go 1.1+ `CancelRequest()` API.

Index

Package Files

httpclient.go

func Version Uses

func Version() string

returns the current version of the package

type Transport Uses

type Transport struct {
    // Proxy specifies a function to return a proxy for a given
    // *http.Request. If the function returns a non-nil error, the
    // request is aborted with the provided error.
    // If Proxy is nil or returns a nil *url.URL, no proxy is used.
    Proxy func(*http.Request) (*url.URL, error)

    // Dial specifies the dial function for creating TCP
    // connections. This will override the Transport's ConnectTimeout and
    // ReadWriteTimeout settings.
    // If Dial is nil, a dialer is generated on demand matching the Transport's
    // options.
    Dial func(network, addr string) (net.Conn, error)

    // TLSClientConfig specifies the TLS configuration to use with
    // tls.Client. If nil, the default configuration is used.
    TLSClientConfig *tls.Config

    // DisableKeepAlives, if true, prevents re-use of TCP connections
    // between different HTTP requests.
    DisableKeepAlives bool

    // DisableCompression, if true, prevents the Transport from
    // requesting compression with an "Accept-Encoding: gzip"
    // request header when the Request contains no existing
    // Accept-Encoding value. If the Transport requests gzip on
    // its own and gets a gzipped response, it's transparently
    // decoded in the Response.Body. However, if the user
    // explicitly requested gzip it is not automatically
    // uncompressed.
    DisableCompression bool

    // MaxIdleConnsPerHost, if non-zero, controls the maximum idle
    // (keep-alive) to keep per-host.  If zero,
    // http.DefaultMaxIdleConnsPerHost is used.
    MaxIdleConnsPerHost int

    // ConnectTimeout, if non-zero, is the maximum amount of time a dial will wait for
    // a connect to complete.
    ConnectTimeout time.Duration

    // ResponseHeaderTimeout, if non-zero, specifies the amount of
    // time to wait for a server's response headers after fully
    // writing the request (including its body, if any). This
    // time does not include the time to read the response body.
    ResponseHeaderTimeout time.Duration

    // RequestTimeout, if non-zero, specifies the amount of time for the entire
    // request to complete (including all of the above timeouts + entire response body).
    // This should never be less than the sum total of the above two timeouts.
    RequestTimeout time.Duration

    // ReadWriteTimeout, if non-zero, will set a deadline for every Read and
    // Write operation on the request connection.
    ReadWriteTimeout time.Duration

    // TCPWriteBufferSize, the size of the operating system's write
    // buffer associated with the connection.
    TCPWriteBufferSize int

    // TCPReadBuffserSize, the size of the operating system's read
    // buffer associated with the connection.
    TCPReadBufferSize int
    // contains filtered or unexported fields
}

Transport implements the RoundTripper interface and can be used as a replacement for Go's built in http.Transport implementing end-to-end request timeouts.

transport := &httpclient.Transport{
    ConnectTimeout: 1*time.Second,
    ResponseHeaderTimeout: 5*time.Second,
    RequestTimeout: 10*time.Second,
}
defer transport.Close()

client := &http.Client{Transport: transport}
req, _ := http.NewRequest("GET", "http://127.0.0.1/test", nil)
resp, err := client.Do(req)
if err != nil {
    return err
}
defer resp.Body.Close()

func (*Transport) CancelRequest Uses

func (t *Transport) CancelRequest(req *http.Request)

func (*Transport) Close Uses

func (t *Transport) Close() error

Close cleans up the Transport, currently a no-op

func (*Transport) CloseIdleConnections Uses

func (t *Transport) CloseIdleConnections()

func (*Transport) RegisterProtocol Uses

func (t *Transport) RegisterProtocol(scheme string, rt http.RoundTripper)

func (*Transport) RoundTrip Uses

func (t *Transport) RoundTrip(req *http.Request) (resp *http.Response, err error)

Package httpclient imports 8 packages (graph) and is imported by 45 packages. Updated 2016-07-18. Refresh now. Tools for package owners.