package proxy
import "cloud.google.com/go/httpreplay/internal/proxy"
Package proxy provides a record/replay HTTP proxy. It is designed to support both an in-memory API (cloud.google.com/go/httpreplay) and a standalone server (cloud.google.com/go/httpreplay/cmd/httpr).
Index ¶
- Constants
- Variables
- type Converter
- type Entry
- type Log
- type Logger
- func (l *Logger) Extract() *Log
- func (l *Logger) ModifyRequest(req *http.Request) error
- func (l *Logger) ModifyResponse(res *http.Response) error
- type Proxy
- func ForRecording(filename string, port int) (*Proxy, error)
- func ForReplaying(filename string, port int) (*Proxy, error)
- func (p *Proxy) ClearHeaders(patterns []string)
- func (p *Proxy) ClearQueryParams(patterns []string)
- func (p *Proxy) Close() error
- func (p *Proxy) IgnoreHeader(h string)
- func (p *Proxy) RemoveQueryParams(patterns []string)
- func (p *Proxy) RemoveRequestHeaders(patterns []string)
- func (p *Proxy) Transport() *http.Transport
- type Request
- type Response
Constants ¶
const LogVersion = "0.2"
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.
Variables ¶
var DebugHeaders = false
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.
Types ¶
type Converter ¶
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 }
A Converter converts HTTP requests and responses to the Request and Response types of this package, while removing or redacting information.
type Entry ¶
An Entry single request-response pair.
type Log ¶
type Log struct { Initial []byte // initial data for replay Version string // version of this log format Converter *Converter Entries []*Entry }
A Log is a record of HTTP interactions, suitable for replay. It can be serialized to JSON.
type Logger ¶
type Logger struct {
// contains filtered or unexported fields
}
A Logger maintains a request-response log.
func (*Logger) Extract ¶
Extract returns the Log and removes it. The Logger is not usable after this call.
func (*Logger) ModifyRequest ¶
ModifyRequest logs requests.
func (*Logger) ModifyResponse ¶
ModifyResponse logs responses.
type Proxy ¶
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 }
A Proxy is an HTTP proxy that supports recording or replaying requests.
func ForRecording ¶
ForRecording returns a Proxy configured to record.
func ForReplaying ¶
ForReplaying returns a Proxy configured to replay.
func (*Proxy) ClearHeaders ¶
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 (*Proxy) ClearQueryParams ¶
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 (*Proxy) Close ¶
Close closes the proxy. If the proxy is recording, it also writes the log.
func (*Proxy) IgnoreHeader ¶
IgnoreHeader will cause h to be ignored during matching on replay. Deprecated: use RemoveRequestHeaders instead.
func (*Proxy) RemoveQueryParams ¶
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 (*Proxy) RemoveRequestHeaders ¶
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 (*Proxy) Transport ¶
Transport returns an http.Transport for clients who want to talk to the proxy.
type Request ¶
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 Request represents an http.Request in the log.
type Response ¶
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 }
A Response represents an http.Response in the log.
Source Files ¶
converter.go debug.go log.go record.go replay.go
- Version
- v0.118.0
- Published
- Jan 2, 2025
- Platform
- darwin/amd64
- Imports
- 25 packages
- Last checked
- 1 hour ago –
Tools for package owners.