Package httputil
Overview ?
Overview ?
Package httputil provides HTTP utility functions, complementing the more common ones in the net/http package.
Index
- Variables
- func DumpRequest(req *http.Request, body bool) (dump []byte, err error)
- func DumpRequestOut(req *http.Request, body bool) ([]byte, error)
- func DumpResponse(resp *http.Response, body bool) (dump []byte, err error)
- func NewChunkedReader(r io.Reader) io.Reader
- func NewChunkedWriter(w io.Writer) io.WriteCloser
- type ClientConn
- func NewClientConn(c net.Conn, r *bufio.Reader) *ClientConn
- func NewProxyClientConn(c net.Conn, r *bufio.Reader) *ClientConn
- func (cc *ClientConn) Close() error
- func (cc *ClientConn) Do(req *http.Request) (resp *http.Response, err error)
- func (cc *ClientConn) Hijack() (c net.Conn, r *bufio.Reader)
- func (cc *ClientConn) Pending() int
- func (cc *ClientConn) Read(req *http.Request) (resp *http.Response, err error)
- func (cc *ClientConn) Write(req *http.Request) (err error)
- type ReverseProxy
- func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy
- func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request)
- type ServerConn
- func NewServerConn(c net.Conn, r *bufio.Reader) *ServerConn
- func (sc *ServerConn) Close() error
- func (sc *ServerConn) Hijack() (c net.Conn, r *bufio.Reader)
- func (sc *ServerConn) Pending() int
- func (sc *ServerConn) Read() (req *http.Request, err error)
- func (sc *ServerConn) Write(req *http.Request, resp *http.Response) error
Package files
chunked.go dump.go persist.go reverseproxy.go
Variables
var ( ErrPersistEOF = &http.ProtocolError{ErrorString: "persistent connection closed"} ErrClosed = &http.ProtocolError{ErrorString: "connection closed by user"} ErrPipeline = &http.ProtocolError{ErrorString: "pipeline error"} )
var ErrLineTooLong = errors.New("header line too long")
func DumpRequest
func DumpRequest(req *http.Request, body bool) (dump []byte, err error)
DumpRequest returns the as-received wire representation of req, optionally including the request body, for debugging. DumpRequest is semantically a no-op, but in order to dump the body, it reads the body data into memory and changes req.Body to refer to the in-memory copy. The documentation for http.Request.Write details which fields of req are used.
func DumpRequestOut
func DumpRequestOut(req *http.Request, body bool) ([]byte, error)
DumpRequestOut is like DumpRequest but includes headers that the standard http.Transport adds, such as User-Agent.
func DumpResponse
func DumpResponse(resp *http.Response, body bool) (dump []byte, err error)
DumpResponse is like DumpRequest but dumps a response.
func NewChunkedReader
func NewChunkedReader(r io.Reader) io.Reader
NewChunkedReader returns a new chunkedReader that translates the data read from r out of HTTP "chunked" format before returning it. The chunkedReader returns io.EOF when the final 0-length chunk is read.
NewChunkedReader is not needed by normal applications. The http package automatically decodes chunking when reading response bodies.
func NewChunkedWriter
func NewChunkedWriter(w io.Writer) io.WriteCloser
NewChunkedWriter returns a new chunkedWriter that translates writes into HTTP "chunked" format before writing them to w. Closing the returned chunkedWriter sends the final 0-length chunk that marks the end of the stream.
NewChunkedWriter is not needed by normal applications. The http package adds chunking automatically if handlers don't set a Content-Length header. Using NewChunkedWriter inside a handler would result in double chunking or chunking with a Content-Length length, both of which are wrong.
type ClientConn
type ClientConn struct {
// contains filtered or unexported fields
}
A ClientConn sends request and receives headers over an underlying connection, while respecting the HTTP keepalive logic. ClientConn supports hijacking the connection calling Hijack to regain control of the underlying net.Conn and deal with it as desired.
ClientConn is low-level and should not be needed by most applications. See Client.
func NewClientConn
func NewClientConn(c net.Conn, r *bufio.Reader) *ClientConn
NewClientConn returns a new ClientConn reading and writing c. If r is not nil, it is the buffer to use when reading c.
func NewProxyClientConn
func NewProxyClientConn(c net.Conn, r *bufio.Reader) *ClientConn
NewProxyClientConn works like NewClientConn but writes Requests using Request's WriteProxy method.
func (*ClientConn) Close
func (cc *ClientConn) Close() error
Close calls Hijack and then also closes the underlying connection
func (*ClientConn) Do
func (cc *ClientConn) Do(req *http.Request) (resp *http.Response, err error)
Do is convenience method that writes a request and reads a response.
func (*ClientConn) Hijack
func (cc *ClientConn) Hijack() (c net.Conn, r *bufio.Reader)
Hijack detaches the ClientConn and returns the underlying connection as well as the read-side bufio which may have some left over data. Hijack may be called before the user or Read have signaled the end of the keep-alive logic. The user should not call Hijack while Read or Write is in progress.
func (*ClientConn) Pending
func (cc *ClientConn) Pending() int
Pending returns the number of unanswered requests that have been sent on the connection.
func (*ClientConn) Read
func (cc *ClientConn) Read(req *http.Request) (resp *http.Response, err error)
Read reads the next response from the wire. A valid response might be returned together with an ErrPersistEOF, which means that the remote requested that this be the last request serviced. Read can be called concurrently with Write, but not with another Read.
func (*ClientConn) Write
func (cc *ClientConn) Write(req *http.Request) (err error)
Write writes a request. An ErrPersistEOF error is returned if the connection has been closed in an HTTP keepalive sense. If req.Close equals true, the keepalive connection is logically closed after this request and the opposing server is informed. An ErrUnexpectedEOF indicates the remote closed the underlying TCP connection, which is usually considered as graceful close.
type ReverseProxy
type ReverseProxy struct { // Director must be a function which modifies // the request into a new request to be sent // using Transport. Its response is then copied // back to the original client unmodified. Director func(*http.Request) // The transport used to perform proxy requests. // If nil, http.DefaultTransport is used. Transport http.RoundTripper // FlushInterval specifies the flush interval // to flush to the client while copying the // response body. // If zero, no periodic flushing is done. FlushInterval time.Duration }
ReverseProxy is an HTTP Handler that takes an incoming request and sends it to another server, proxying the response back to the client.
func NewSingleHostReverseProxy
func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy
NewSingleHostReverseProxy returns a new ReverseProxy that rewrites URLs to the scheme, host, and base path provided in target. If the target's path is "/base" and the incoming request was for "/dir", the target request will be for /base/dir.
func (*ReverseProxy) ServeHTTP
func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request)
type ServerConn
type ServerConn struct {
// contains filtered or unexported fields
}
A ServerConn reads requests and sends responses over an underlying connection, until the HTTP keepalive logic commands an end. ServerConn also allows hijacking the underlying connection by calling Hijack to regain control over the connection. ServerConn supports pipe-lining, i.e. requests can be read out of sync (but in the same order) while the respective responses are sent.
ServerConn is low-level and should not be needed by most applications. See Server.
func NewServerConn
func NewServerConn(c net.Conn, r *bufio.Reader) *ServerConn
NewServerConn returns a new ServerConn reading and writing c. If r is not nil, it is the buffer to use when reading c.
func (*ServerConn) Close
func (sc *ServerConn) Close() error
Close calls Hijack and then also closes the underlying connection
func (*ServerConn) Hijack
func (sc *ServerConn) Hijack() (c net.Conn, r *bufio.Reader)
Hijack detaches the ServerConn and returns the underlying connection as well as the read-side bufio which may have some left over data. Hijack may be called before Read has signaled the end of the keep-alive logic. The user should not call Hijack while Read or Write is in progress.
func (*ServerConn) Pending
func (sc *ServerConn) Pending() int
Pending returns the number of unanswered requests that have been received on the connection.
func (*ServerConn) Read
func (sc *ServerConn) Read() (req *http.Request, err error)
Read returns the next request on the wire. An ErrPersistEOF is returned if it is gracefully determined that there are no more requests (e.g. after the first request on an HTTP/1.0 connection, or after a Connection:close on a HTTP/1.1 connection).
func (*ServerConn) Write
func (sc *ServerConn) Write(req *http.Request, resp *http.Response) error
Write writes resp in response to req. To close the connection gracefully, set the Response.Close field to true. Write should be considered operational until it returns an error, regardless of any errors returned on the Read side.
Except as noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License, and code is licensed under a BSD license.
Terms of Service | Privacy Policy