1. type Client struct {
    2. // Transport 用于确定HTTP请求的创建机制。
    3. // 如果为空,将会使用DefaultTransport
    4. Transport RoundTripper
    5. // CheckRedirect定义重定向策略。
    6. // 如果CheckRedirect不为空,客户端将在跟踪HTTP重定向前调用该函数。
    7. // 两个参数req和via分别为即将发起的请求和已经发起的所有请求,最早的
    8. // 已发起请求在最前面。
    9. // 如果CheckRedirect返回错误,客户端将直接返回错误,不会再发起该请求。
    10. // 如果CheckRedirect为空,Client将采用一种确认策略,将在10个连续
    11. // 请求后终止
    12. CheckRedirect func(req *Request, via []*Request) error
    13. // 如果Jar为空,Cookie将不会在请求中发送,并会
    14. // 在响应中被忽略
    15. Jar CookieJar
    16. }
    1. type Transport struct {
    2. // Proxy指定用于针对特定请求返回代理的函数。
    3. // 如果该函数返回一个非空的错误,请求将终止并返回该错误。
    4. // 如果Proxy为空或者返回一个空的URL指针,将不使用代理
    5. Proxy func(*Request) (*url.URL, error)
    6. // Dial指定用于创建TCP连接的dail()函数。
    7. // 如果Dial为空,将默认使用net.Dial()函数
    8. Dial func(net, addr string) (c net.Conn, err error)
    9. // TLSClientConfig指定用于tls.Client的TLS配置。
    10. // 如果为空则使用默认配置
    11. TLSClientConfig *tls.Config
    12. DisableKeepAlives bool
    13. DisableCompression bool
    14. // 如果MaxIdleConnsPerHost为非零值,它用于控制每个host所需要
    15. // 保持的最大空闲连接数。如果该值为空,则使用DefaultMaxIdleConnsPerHost
    16. MaxIdleConnsPerHost int
    17. // ...
    18. }

    自定义RoundTripper 只要实现RoundTrip方法

    1. type RoundTripper interface {
    2. // RoundTrip执行一个单一的HTTP事务,返回相应的响应信息。
    3. // RoundTrip函数的实现不应试图去理解响应的内容。如果RoundTrip得到一个响应,
    4. // 无论该响应的HTTP状态码如何,都应将返回的err设置为nil。非空的err
    5. // 只意味着没有成功获取到响应。
    6. // 类似地,RoundTrip也不应试图处理更高级别的协议,比如重定向、认证和
    7. // Cookie等。
    8. //
    9. // RoundTrip不应修改请求内容, 除非了是为了理解Body内容。每一个请求
    10. // 的URL和Header域都应被正确初始化
    11. RoundTrip(*Request) (*Response, error)
    12. }