### 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
```
- 安装开发环境
- 安装开发环境
- 安装详细教程
- 引入包
- Go语言基础
- 基本变量与数据类型
- 变量
- 数据类型
- 指针
- 字符串
- 代码总结
- 常量与运算符
- 常量
- 运算符
- 流程控制
- if判断
- for循环
- switch分支
- goto跳转
- 斐波那契数列
- Go语言内置容器
- 数组
- 切片
- 映射
- 函数
- 函数(上)
- 函数(中)
- 函数(下)
- 小节
- 包管理
- 结构体
- 结构体(上)
- 结构体(中)
- 结构体(下)
- 小节
- 错误处理
- 错误处理
- 宕机
- 错误应用
- 小节
- 文件操作
- 获取目录
- 创建和删除目录
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 处理JSON文件
- 接口与类型
- 接口的创建与实现
- 接口赋值
- 接口嵌入
- 空接口
- 类型断言(1)
- 类型断言(2)
- 小节
- 并发与通道
- goroutine协程
- runtime包
- 通道channel
- 单向通道channel
- select
- 线程同步
- 多线程的深入学习
- http编程
- http简介
- Client和Request
- get请求
- post请求
- 模块函数方法
- 模块
- fmt库,模块
- 项目练习
- 爬虫:高三网
- 爬虫:快代理
- 爬虫:快代理2
- 多线程:通道思路
- 多线程爬虫:快代理