LogVersion is the current version of the log format. It can be used to support changes to the format over time, so newer code can read older files.
const LogVersion = "0.2"
DebugHeaders helps to determine whether a header should be ignored. When true, if requests have the same method, URL and body but differ in a header, the first mismatched header is logged.
var DebugHeaders = false
A Converter converts HTTP requests and responses to the Request and Response types of this package, while removing or redacting information.
type Converter struct { // These all apply to both headers and trailers. ClearHeaders []tRegexp // replace matching headers with "CLEARED" RemoveRequestHeaders []tRegexp // remove matching headers in requests RemoveResponseHeaders []tRegexp // remove matching headers in responses ClearParams []tRegexp // replace matching query params with "CLEARED" RemoveParams []tRegexp // remove matching query params }
An Entry single request-response pair.
type Entry struct { ID string // unique ID Request *Request Response *Response }
A Log is a record of HTTP interactions, suitable for replay. It can be serialized to JSON.
type Log struct { Initial []byte // initial data for replay Version string // version of this log format Converter *Converter Entries []*Entry }
A Logger maintains a request-response log.
type Logger struct {
// contains filtered or unexported fields
}
func (l *Logger) Extract() *Log
Extract returns the Log and removes it. The Logger is not usable after this call.
func (l *Logger) ModifyRequest(req *http.Request) error
ModifyRequest logs requests.
func (l *Logger) ModifyResponse(res *http.Response) error
ModifyResponse logs responses.
A Proxy is an HTTP proxy that supports recording or replaying requests.
type Proxy struct { // The certificate that the proxy uses to participate in TLS. CACert *x509.Certificate // The URL of the proxy. URL *url.URL // Initial state of the client. Initial []byte // contains filtered or unexported fields }
func ForRecording(filename string, port int) (*Proxy, error)
ForRecording returns a Proxy configured to record.
func ForReplaying(filename string, port int) (*Proxy, error)
ForReplaying returns a Proxy configured to replay.
func (p *Proxy) ClearHeaders(patterns []string)
ClearHeaders will replace matching headers with CLEARED.
This only needs to be called during recording; the patterns will be saved to the log for replay.
func (p *Proxy) ClearQueryParams(patterns []string)
ClearQueryParams will replace matching query params in the request URL with CLEARED.
This only needs to be called during recording; the patterns will be saved to the log for replay.
func (p *Proxy) Close() error
Close closes the proxy. If the proxy is recording, it also writes the log.
func (p *Proxy) IgnoreHeader(h string)
IgnoreHeader will cause h to be ignored during matching on replay. Deprecated: use RemoveRequestHeaders instead.
func (p *Proxy) RemoveQueryParams(patterns []string)
RemoveQueryParams will remove query parameters matching patterns from the request URL before logging, and skip matching them. Pattern is taken literally except for *, which matches any sequence of characters.
This only needs to be called during recording; the patterns will be saved to the log for replay.
func (p *Proxy) RemoveRequestHeaders(patterns []string)
RemoveRequestHeaders will remove request headers matching patterns from the log, and skip matching them. Pattern is taken literally except for *, which matches any sequence of characters.
This only needs to be called during recording; the patterns will be saved to the log for replay.
func (p *Proxy) Transport() *http.Transport
Transport returns an http.Transport for clients who want to talk to the proxy.
A Request represents an http.Request in the log.
type Request struct { Method string // http.Request.Method URL string // http.Request.URL, as a string Header http.Header // http.Request.Header // We need to understand multipart bodies because the boundaries are // generated randomly, so we can't just compare the entire bodies for equality. MediaType string // the media type part of the Content-Type header BodyParts [][]byte // http.Request.Body, read to completion and split for multipart Trailer http.Header `json:",omitempty"` // http.Request.Trailer }
A Response represents an http.Response in the log.
type Response struct { StatusCode int // http.Response.StatusCode Proto string // http.Response.Proto ProtoMajor int // http.Response.ProtoMajor ProtoMinor int // http.Response.ProtoMinor Header http.Header // http.Response.Header Body []byte // http.Response.Body, read to completion Trailer http.Header `json:",omitempty"` // http.Response.Trailer }