http包提供了HTTP client和service的实现。
client#####
使用http包提供的函数Get( )
、Head( )
、Post( )
、PostForm( )
,可以发起简单的HTTP(或者HTTPS)请求:
resp, err := http.Get("http://example.com/")
...
resp, err := http.Post("http://example.com/upload", "image/jpeg", &buf)
...
resp, err := http.PostForm("http://example.com/form",
url.Values{"key": {"Value"}, "id": {"123"}})
一个Client是一个http客户端,Client的零值是一个使用DefaultTransport的可用的http客服端。Client的Transport具有内部状态(缓存TCP连接),所以一个Client应该被重复利用。一个Client可被多个goroutines安全地并发使用。
当client完成请求时必须close响应体:
resp, err := http.Get("http://google.com/")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
// ...```
http导出函数```Get( )```、```Head( )```、```Post( )```、```PostForm( )```提供了发起简单网络请求能力。
当需要控制请求头内容、重定向策略等... 这时候需要创建一个Client:
client := &http.Client{
CheckRedirect: redirectPolicyFunc,
}
resp, err := client.Get(“http://example.com“)
// …
req, err := http.NewRequest(“GET”, “http://example.com“, nil)
// …
req.Header.Add(“If-None-Match”, W/"wyzzy"
)
resp, err := client.Do(req)
// …“`
当需要控制http代理、TLS配置、keep-alive、http压缩等… 这时需要创建一个 Transport:
tr := &http.Transport{
TLSClientConfig: &tls.Config{RootCAs: pool},
DisableCompression: true,
}
client := &http.Client{Transport: tr}
resp, err := client.Get("https://example.com")```
通过创建一个自定义服务器,可以对服务端的行为进行更多的控制:
s := &http.Server{
Addr: “:8080”,
Handler: myHandler,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
log.Fatal(s.ListenAndServe())“`