🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### Client Client的结构相对较为简单,只有四个成员,分别是Transport,CheckRedirect、Jar和Timeout * Transport 指定执行独立、单次HTTP请求的机制。如果Transpori为nil,则使用DefaultTransport 。 * CheckRedirect指定处理重定向的策略。如果CheckRedirect不为nil,客户端会在执行重定向之前调用本函数字段。参数reg和via是将要执行的请求和已经执行的请求(切片,越新的请求越靠后)。如果CheckRedirect返回一个错误,本类型的GET方法不会发送请求req,而是返回之前得到的最后一个回复和该错误(包装进url.Error类型里)。如果CheckRedirect为nil,会采用默认策略:连续十次请求后停止。 * Jar指定Cookie管理器。如果Jar为nil,请求中不会发送Cookie,回复中的Cookie会被忽略。 * Timeout指定本类型的值执行请求的时间限制。该超时限制包括连接时间、重定向和读取回复主体的时间。计时器会在Head、Get、Post或Do方法返回后继续运作,并在超时后中断回复主体的读取。Timeout为零值表示不设置超时。 参考:https://blog.csdn.net/tiechui1994/article/details/105752317 ``` type Client struct { Transport RoundTripper CheckRedirect func(req *Request, via []*Request) error Jar CookieJar Timeout time.Duration } ``` Client的方法 ``` func (c *Client) Do(req *Request) (resp *Response, err error) func (c *Client) Head(url string) (resp *Response, err error) func (c *Client) Get(url string) (resp *Response, err error) func (c *Client) Post(url string, bodyType string, body io.Reader) (resp *Response, err error) func (c *Client) PostfForm(url string, data url.values)(resp *Response, err error) ``` ### Request Request结构 ``` type Request struct{ Method string //请求方法 URL *url.URL //请求地址 Proto string //协议版本,“HTTP/1.0” ProtoMajor int //协议主版本号,“1” ProtoMinor int //协议主版号,“0” Header Header // 请求头 Body io.ReadCloser // 请求的Body ContentLength int64 // ContentLength记录相关内容的长度 TransferEncoding []string // TransferEncoding按从最外到最里的顺序列出传输编码 Close bool // close在服务端指定是否在回复请求后关闭连接,在客户端指定是否在发送请求后关闭连接 Host string // Host指定URL会在其上寻找资源的主机 Form url.values //Form是解析好的表单数据,包括URL字段的query参数和PosT或PUT的表单数据 PostForm url.values //PostForm是解析好的POST或PUT的表单数据 MultipartForm *multipart.Form // MultipartForm是解析好的多部件表单,包括上传的文件 Trailer Header // Trailer指定了会在请求主体之后发送的额外的头域 RemoteAddr string // RemoteAddr允许HTTP服务器和其他软件记录该请求的来源地址,一般用于日志 RequestURI string // RequestURI是被客户端发送到服务端的请 求中未修改的URI TLS *tls.ConnectionState // TLS字段允许HTTP服务器和其他软件记录接收到该请求的TLS连接的信息 } ``` Request方法 ``` func NewRequest(method, urlStr string, body io.Reader) (*Request, error) func ReadRequest(b *bufio.Reader) (*Request, error) func (r *Request) AddCookie(c *Cookie) func (r *Request) BasicAuth() (username, password string, ok bool) func (r *Request) Context() context.Context func (r *Request) Cookie(name string) (*Cookie, error) func (r *Request) Cookies() []*Cookie func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error) func (r *Request) FormValue(key string) string func (r *Request) MultipartReader() (*multipart.Reader, error) func (r *Request) ParseForm() error func (r *Request) ParseMultipartForm(maxMemory int64) error func (r *Request) PostFormValue(key string) string func (r *Request) ProtoAtLeast(major, minor int) bool func (r *Request) Referer() string func (r *Request) SetBasicAuth(username, password string) func (r *Request) UserAgent() string func (r *Request) WithContext(ctx context.Context) *Request func (r *Request) Write(w io.Writer) error func (r *Request) WriteProxy(w io.Writer) error ```