### 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
- 多線程:通道思路
- 多線程爬蟲:快代理