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 PreResolveTargetAddr(clientConf *ClientConfig, target string) (string, error)
- func WrapGun(g Gun) core.Gun
- type Ammo
- type AnswLogConfig
- type AutoTagConfig
- type BaseGun
- func NewBaseGun(clientConstructor ClientConstructor, cfg HTTPGunConfig, answLog *zap.Logger) *BaseGun
- func NewConnectGun(cfg HTTPGunConfig, answLog *zap.Logger) *BaseGun
- func NewHTTP1Gun(cfg HTTPGunConfig, answLog *zap.Logger, targetResolved string) *BaseGun
- func NewHTTP2Gun(cfg HTTPGunConfig, answLog *zap.Logger, targetResolved string) (*BaseGun, error)
- type BaseGunConfig
- type Client
- func HTTP1ClientConstructor(clientConfig ClientConfig, target string) Client
- func HTTP2ClientConstructor(clientConfig ClientConfig, target string) Client
- func NewRedirectingClient(tr *http.Transport, redirect bool) Client
- func WrapClientHostResolving(client Client, cfg HTTPGunConfig, targetResolved string) Client
- type ClientConfig
- type ClientConstructor
- type DialerConfig
- type Gun
- type HTTPGunConfig
- type HTTPTraceConfig
- type SharedDeps
- 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
func PreResolveTargetAddr ¶ added in v0.5.22
func PreResolveTargetAddr(clientConf *ClientConfig, target string) (string, error)
DNS resolve optimisation. When DNSCache turned off - do nothing extra, host will be resolved on every shoot. When using resolved target, don't use DNS caching logic - it is useless. If we can resolve accessible target addr - use it as target, not use caching. Otherwise just use DNS cache - we should not fail shooting, we should try to connect on every shoot. DNS cache will save resolved addr after first successful connect.
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 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 Client Client ClientConstructor func() Client core.GunDeps }
func NewBaseGun ¶ added in v0.5.22
func NewBaseGun(clientConstructor ClientConstructor, cfg HTTPGunConfig, answLog *zap.Logger) *BaseGun
func NewConnectGun ¶
func NewConnectGun(cfg HTTPGunConfig, answLog *zap.Logger) *BaseGun
func NewHTTP1Gun ¶ added in v0.5.22
func NewHTTP1Gun(cfg HTTPGunConfig, answLog *zap.Logger, targetResolved string) *BaseGun
func NewHTTP2Gun ¶
NewHTTP2Gun return simple HTTP/2 gun that can shoot sequentially through one connection.
type BaseGunConfig ¶
type BaseGunConfig struct { AutoTag AutoTagConfig `config:"auto-tag"` AnswLog AnswLogConfig `config:"answlog"` HTTPTrace HTTPTraceConfig `config:"httptrace"` ClientNumber int `config:"client-number,omitempty"` Enabled bool `config:"enabled"` } `config:"shared-client,omitempty"` }
func DefaultBaseGunConfig ¶
func DefaultBaseGunConfig() BaseGunConfig
type Client ¶
type Client interface { Do(req *http.Request) (*http.Response, error) CloseIdleConnections() // We should close idle conns after gun close. }
func HTTP1ClientConstructor ¶ added in v0.5.22
func HTTP1ClientConstructor(clientConfig ClientConfig, target string) Client
func HTTP2ClientConstructor ¶ added in v0.5.22
func HTTP2ClientConstructor(clientConfig ClientConfig, target string) Client
func NewRedirectingClient ¶ added in v0.5.22
func WrapClientHostResolving ¶ added in v0.5.22
func WrapClientHostResolving(client Client, cfg HTTPGunConfig, targetResolved string) Client
type ClientConfig ¶
type ClientConfig struct { Redirect bool // When true, follow HTTP redirects. Dialer DialerConfig `config:"dial"` Transport TransportConfig `config:",squash"` ConnectSSL bool `config:"connect-ssl"` // Defines if tunnel encrypted. }
func DefaultClientConfig ¶
func DefaultClientConfig() ClientConfig
type ClientConstructor ¶ added in v0.5.22
type ClientConstructor func(clientConfig ClientConfig, target string) Client
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 HTTPGunConfig ¶
type HTTPGunConfig struct { Base BaseGunConfig `config:",squash"` Client ClientConfig `config:",squash"` Target string `validate:"endpoint,required"` SSL bool }
func DefaultConnectGunConfig ¶
func DefaultConnectGunConfig() HTTPGunConfig
func DefaultHTTP2GunConfig ¶
func DefaultHTTP2GunConfig() HTTPGunConfig
func DefaultHTTPGunConfig ¶
func DefaultHTTPGunConfig() HTTPGunConfig
type HTTPTraceConfig ¶
type SharedDeps ¶ added in v0.5.22
type SharedDeps struct {
// contains filtered or unexported fields
}
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