Documentation ¶
Overview ¶
package phttp (pandora http) contains pandora extension points for HTTP related protocols.
Index ¶
- Constants
- func GetBody(req *http.Request) []byte
- func NewDialer(conf DialerConfig) netutil.Dialer
- func NewHTTP2Transport(conf TransportConfig, dial netutil.DialerFunc, target string) *http.Transport
- func NewTransport(conf TransportConfig, dial netutil.DialerFunc, target string) *http.Transport
- func WrapGun(g Gun) core.Gun
- type Ammo
- type AnswLogConfig
- type AutoTagConfig
- type BaseGun
- type BaseGunConfig
- type Client
- type ClientConfig
- type ClientGunConfig
- type ConnectGun
- type ConnectGunConfig
- type DialerConfig
- type Gun
- type HTTP2GunConfig
- type HTTPGun
- type HTTPGunConfig
- type HTTPTraceConfig
- type TraceTimings
- type TransportConfig
Constants ¶
const (
EmptyTag = "__EMPTY__"
)
Variables ¶
This section is empty.
Functions ¶
func NewDialer ¶
func NewDialer(conf DialerConfig) netutil.Dialer
func NewHTTP2Transport ¶
func NewHTTP2Transport(conf TransportConfig, dial netutil.DialerFunc, target string) *http.Transport
func NewTransport ¶
func NewTransport(conf TransportConfig, dial netutil.DialerFunc, target string) *http.Transport
Types ¶
type Ammo ¶
type Ammo interface { // TODO(skipor): instead of sample use it wrapper with httptrace and more usable interface. Request() (*http.Request, *netsample.Sample) // Id unique ammo id. Usually equals to ammo num got from provider. ID() uint64 IsInvalid() bool }
Ammo ammo interface for http based guns. http ammo providers should produce ammo that implements Ammo. http guns should use convert ammo to Ammo, not to specific implementation. Returned request have
type AnswLogConfig ¶
type AutoTagConfig ¶
type AutoTagConfig struct { Enabled bool `config:"enabled"` URIElements int `config:"uri-elements" validate:"min=1"` // URI elements used to autotagging NoTagOnly bool `config:"no-tag-only"` // When true, autotagged only ammo that has no tag before. }
AutoTagConfig configure automatic tags generation based on ammo URI. First AutoTag URI path elements becomes tag. Example: /my/very/deep/page?id=23¶m=33 -> /my/very when uri-elements: 2.
type BaseGun ¶
type BaseGun struct { DebugLog bool // Automaticaly set in Bind if Log accepts debug messages. Config BaseGunConfig Do func(r *http.Request) (*http.Response, error) // Required. Connect func(ctx context.Context) error // Optional hook. OnClose func() error // Optional. Called on Close(). Aggregator netsample.Aggregator // Lazy set via BindResultTo. AnswLog *zap.Logger core.GunDeps }
type BaseGunConfig ¶
type BaseGunConfig struct { AutoTag AutoTagConfig `config:"auto-tag"` AnswLog AnswLogConfig `config:"answlog"` HTTPTrace HTTPTraceConfig `config:"httptrace"` }
func DefaultBaseGunConfig ¶
func DefaultBaseGunConfig() BaseGunConfig
type ClientConfig ¶
type ClientConfig struct { Redirect bool // When true, follow HTTP redirects. Dialer DialerConfig `config:"dial"` Transport TransportConfig `config:",squash"` }
func DefaultClientConfig ¶
func DefaultClientConfig() ClientConfig
type ClientGunConfig ¶
type ClientGunConfig struct { Target string `validate:"endpoint,required"` SSL bool Base BaseGunConfig `config:",squash"` }
func DefaultClientGunConfig ¶
func DefaultClientGunConfig() ClientGunConfig
type ConnectGun ¶
type ConnectGun struct { BaseGun // contains filtered or unexported fields }
func NewConnectGun ¶
func NewConnectGun(conf ConnectGunConfig, answLog *zap.Logger) *ConnectGun
type ConnectGunConfig ¶
type ConnectGunConfig struct { Target string `validate:"endpoint,required"` ConnectSSL bool `config:"connect-ssl"` // Defines if tunnel encrypted. SSL bool // As in HTTP gun, defines scheme for http requests. Client ClientConfig `config:",squash"` BaseGunConfig `config:",squash"` }
func DefaultConnectGunConfig ¶
func DefaultConnectGunConfig() ConnectGunConfig
type DialerConfig ¶
type DialerConfig struct { DNSCache bool `config:"dns-cache" map:"-"` Timeout time.Duration `config:"timeout"` DualStack bool `config:"dual-stack"` // IPv4/IPv6 settings should not matter really, // because target should be dialed using pre-resolved addr. FallbackDelay time.Duration `config:"fallback-delay"` KeepAlive time.Duration `config:"keep-alive"` }
DialerConfig can be mapped on net.Dialer. Set net.Dialer for details.
func DefaultDialerConfig ¶
func DefaultDialerConfig() DialerConfig
type HTTP2GunConfig ¶
type HTTP2GunConfig struct { Gun ClientGunConfig `config:",squash"` Client ClientConfig `config:",squash"` }
func DefaultHTTP2GunConfig ¶
func DefaultHTTP2GunConfig() HTTP2GunConfig
type HTTPGun ¶
type HTTPGun struct { BaseGun // contains filtered or unexported fields }
func NewClientGun ¶
func NewHTTP2Gun ¶
NewHTTP2Gun return simple HTTP/2 gun that can shoot sequentially through one connection.
func NewHTTPGun ¶
func NewHTTPGun(conf HTTPGunConfig, answLog *zap.Logger, targetResolved string) *HTTPGun
type HTTPGunConfig ¶
type HTTPGunConfig struct { Gun ClientGunConfig `config:",squash"` Client ClientConfig `config:",squash"` }
func DefaultHTTPGunConfig ¶
func DefaultHTTPGunConfig() HTTPGunConfig
type HTTPTraceConfig ¶
type TraceTimings ¶
type TraceTimings struct { GotConnTime time.Time GetConnTime time.Time DNSStartTime time.Time DNSDoneTime time.Time ConnectDoneTime time.Time ConnectStartTime time.Time WroteRequestTime time.Time GotFirstResponseByte time.Time }
func CreateHTTPTrace ¶ added in v0.5.9
func CreateHTTPTrace() (*httptrace.ClientTrace, *TraceTimings)
func (*TraceTimings) GetConnectTime ¶
func (t *TraceTimings) GetConnectTime() time.Duration
func (*TraceTimings) GetLatency ¶
func (t *TraceTimings) GetLatency() time.Duration
func (*TraceTimings) GetReceiveTime ¶
func (t *TraceTimings) GetReceiveTime() time.Duration
func (*TraceTimings) GetSendTime ¶
func (t *TraceTimings) GetSendTime() time.Duration
type TransportConfig ¶
type TransportConfig struct { TLSHandshakeTimeout time.Duration `config:"tls-handshake-timeout"` DisableKeepAlives bool `config:"disable-keep-alives"` DisableCompression bool `config:"disable-compression"` MaxIdleConns int `config:"max-idle-conns"` MaxIdleConnsPerHost int `config:"max-idle-conns-per-host"` IdleConnTimeout time.Duration `config:"idle-conn-timeout"` ResponseHeaderTimeout time.Duration `config:"response-header-timeout"` ExpectContinueTimeout time.Duration `config:"expect-continue-timeout"` }
TransportConfig can be mapped on http.Transport. See http.Transport for details.
func DefaultTransportConfig ¶
func DefaultTransportConfig() TransportConfig