package main
import (
"fmt"
"net/http"
"os"
)
func main() {
}
func Client() {
// 高级封装
// 自定义http.Client
// Client类型的结构
// type Client struct {
// http.Client类型包含了4个公开的数据成员
// Transport RoundTripper // 用于确定http请求的创建机制,必须实现http.RoundTripper接口
// 如果CheckRedirect不为空,客户端将在跟踪http重定向前调用该函数
// 两个参数req和via分别为即将发起的请求和已经发起的所有请求,最早的已经发起请求在最前面
// 如果CheckRedirect返回错误,客户端将直接返回错误,不会再发起请求。
// 如果CheckRedirect为空,Client将采用一种策略,将在10个连续请求后终止
// CheckRedirect func(req *Request, via []*Request) error // 定义重定向策略
// 如果Jar为空,Cookie将不会在请求中发送,并会在响应中被忽略
// Jar CookieJar // 可在http client中以设置Cookie
// Jar类型必须实现http.CookieJar接口
// Timeout time.Duration
// }
// 创建自定义的HTTP Client
client := &http.Client{
CheckRedirect: redirectPolicyFunc,
}
resp, err := client.Get("http://www.xstiku.com")
fmt.Println(resp)
checkError(err)
// func NewRequest(method, url string, body io.Reader) (*Request, error) {
req, err := http.NewRequest("GET", "http://www.xstiku.com", nil)
checkError(err)
req.Header.Add("User-Agent", "Our Custom User-Agent")
req.Header.Add("If-None-Match", `w/"TheFileEtag"`)
resp, err := client.Do(req)
}
func checkError(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "err is %s", err.Error())
}
return
}