Golang net/http

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())“`

    原文作者:勿以浮沙筑高台
    原文地址: https://www.jianshu.com/p/074537e0b98d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞