Пакет httptrace
Обзор
Пакет httptrace предоставляет механизмы для отслеживания событий в запросах HTTP-клиента.
Пример
Код:
req, _ := http.NewRequest("GET", "http://example.com", nil)
trace := &httptrace.ClientTrace{
GotConn: func(connInfo httptrace.GotConnInfo) {
fmt.Printf("Got Conn: %+v\n", connInfo)
},
DNSDone: func(dnsInfo httptrace.DNSDoneInfo) {
fmt.Printf("DNS Info: %+v\n", dnsInfo)
},
}
req = req.WithContext(httptrace.WithClientTrace(req.Context(), trace))
_, err := http.DefaultTransport.RoundTrip(req)
if err != nil {
log.Fatal(err)
}
Индекс
Примеры
Файлы пакета
trace.go
func WithClientTrace 1.7
func WithClientTrace(ctx context.Context, trace *ClientTrace) context.Context
WithClientTrace возвращает новый контекст на основе предоставленного родительского ctx. Запросы HTTP-клиента, выполненные с возвращенным контекстом, будут использовать предоставленные обработчики отслеживания, помимо любых предыдущих обработчиков, зарегистрированных в ctx. Любые обработчики, определенные в предоставленном trace, будут вызваны в первую очередь.
тип ClientTrace 1.7
ClientTrace — это набор обработчиков, которые выполняются на различных этапах исходящего HTTP-запроса. Любой конкретный обработчик может быть равен null. Функции могут вызываться конкурирующими потоками из разных горутин, и некоторые из них могут вызываться после завершения или сбоя запроса.
В настоящее время ClientTrace отслеживает один HTTP-запрос и ответ во время одного цикла и не имеет обработчиков, охватывающих серию перенаправленных запросов.
См. https://blog.golang.org/http-tracing для получения дополнительной информации.
type ClientTrace struct {
// GetConn is called before a connection is created or
// retrieved from an idle pool. The hostPort is the
// "host:port" of the target or proxy. GetConn is called even
// if there's already an idle cached connection available.
GetConn func(hostPort string)
// GotConn is called after a successful connection is
// obtained. There is no hook for failure to obtain a
// connection; instead, use the error from
// Transport.RoundTrip.
GotConn func(GotConnInfo)
// PutIdleConn is called when the connection is returned to
// the idle pool. If err is nil, the connection was
// successfully returned to the idle pool. If err is non-nil,
// it describes why not. PutIdleConn is not called if
// connection reuse is disabled via Transport.DisableKeepAlives.
// PutIdleConn is called before the caller's Response.Body.Close
// call returns.
// For HTTP/2, this hook is not currently used.
PutIdleConn func(err error)
// GotFirstResponseByte is called when the first byte of the response
// headers is available.
GotFirstResponseByte func()
// Got100Continue is called if the server replies with a "100
// Continue" response.
Got100Continue func()
// Got1xxResponse is called for each 1xx informational response header
// returned before the final non-1xx response. Got1xxResponse is called
// for "100 Continue" responses, even if Got100Continue is also defined.
// If it returns an error, the client request is aborted with that error value.
Got1xxResponse func(code int, header textproto.MIMEHeader) error // Go 1.11
// DNSStart is called when a DNS lookup begins.
DNSStart func(DNSStartInfo)
// DNSDone is called when a DNS lookup ends.
DNSDone func(DNSDoneInfo)
// ConnectStart is called when a new connection's Dial begins.
// If net.Dialer.DualStack (IPv6 "Happy Eyeballs") support is
// enabled, this may be called multiple times.
ConnectStart func(network, addr string)
// ConnectDone is called when a new connection's Dial
// completes. The provided err indicates whether the
// connection completed successfully.
// If net.Dialer.DualStack ("Happy Eyeballs") support is
// enabled, this may be called multiple times.
ConnectDone func(network, addr string, err error)
// TLSHandshakeStart is called when the TLS handshake is started. When
// connecting to an HTTPS site via an HTTP proxy, the handshake happens
// after the CONNECT request is processed by the proxy.
TLSHandshakeStart func() // Go 1.8
// TLSHandshakeDone is called after the TLS handshake with either the
// successful handshake's connection state, or a non-nil error on handshake
// failure.
TLSHandshakeDone func(tls.ConnectionState, error) // Go 1.8
// WroteHeaderField is called after the Transport has written
// each request header. At the time of this call the values
// might be buffered and not yet written to the network.
WroteHeaderField func(key string, value []string) // Go 1.11
// WroteHeaders is called after the Transport has written
// all request headers.
WroteHeaders func()
// Wait100Continue is called if the Request specified
// "Expect: 100-continue" and the Transport has written the
// request headers but is waiting for "100 Continue" from the
// server before writing the request body.
Wait100Continue func()
// WroteRequest is called with the result of writing the
// request and any body. It may be called multiple times
// in the case of retried requests.
WroteRequest func(WroteRequestInfo)
}
func ContextClientTrace 1.7
func ContextClientTrace(ctx context.Context) *ClientTrace
ContextClientTrace возвращает ClientTrace, связанный с предоставленным контекстом. Если нет, возвращает null.
тип DNSDoneInfo 1.7
DNSDoneInfo содержит информацию о результатах поиска DNS.
type DNSDoneInfo struct {
// Addrs are the IPv4 and/or IPv6 addresses found in the DNS
// lookup. The contents of the slice should not be mutated.
Addrs []net.IPAddr
// Err is any error that occurred during the DNS lookup.
Err error
// Coalesced is whether the Addrs were shared with another
// caller who was doing the same DNS lookup concurrently.
Coalesced bool
}
тип DNSStartInfo 1.7
DNSStartInfo содержит информацию о запросе DNS.
type DNSStartInfo struct {
Host string
}
тип GotConnInfo 1.7
GotConnInfo — это аргумент для функции [ClientTrace.GotConn] и содержит информацию о полученном соединении.
type GotConnInfo struct {
// Conn is the connection that was obtained. It is owned by
// the http.Transport and should not be read, written or
// closed by users of ClientTrace.
Conn net.Conn
// Reused is whether this connection has been previously
// used for another HTTP request.
Reused bool
// WasIdle is whether this connection was obtained from an
// idle pool.
WasIdle bool
// IdleTime reports how long the connection was previously
// idle, if WasIdle is true.
IdleTime time.Duration
}
тип WroteRequestInfo 1.7
WroteRequestInfo содержит информацию, предоставленную для обработчика WroteRequest.
type WroteRequestInfo struct {
// Err is any error encountered while writing the Request.
Err error
}
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/net/http/httptrace/