原生
之前的文章:Golang HTTP 以及 HTML/XML 解析
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("https://www.baidu.com")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
fmt.Printf("%#v\n", resp.Status) // string, "200 OK"
fmt.Printf("%#v\n", resp.StatusCode) // int, 200
fmt.Printf("%#v\n", resp.Header) // http.Header, map[string][]string
fmt.Printf("%#v\n", resp.Request) // *http.Request
fmt.Printf("%#v\n", resp.ContentLength) // int64
fmt.Printf("%#v\n", resp.TransferEncoding) // []string(nil)
fmt.Printf("%#v\n", resp.Trailer) // http.Header(nil)
fmt.Printf("%#v\n", resp.Uncompressed) // bool
fmt.Printf("%#v\n", resp.TLS) // *tls.ConnectionState
fmt.Printf("%#v\n", resp.Body) // *http.bodyEOFSignal => io.ReadCloser => io.Reader
body, err := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
第三方库
GitHub: http client stars:>1000
- go-resty/resty
Simple HTTP and REST client library for Go - parnurzeal/gorequest
GoRequest -- Simplified HTTP client ( inspired by nodejs SuperAgent ) - gojek/heimdall
An enhanced HTTP client for Go - imroc/req
Simplified Golang HTTP client library with Black Magic, Less Code and More Efficiency - dghubble/sling
A Go HTTP client library for creating and sending API requests - hashicorp/go-retryablehttp
Retryable HTTP client in Go
简单的了解:
- resty 看起来确实不错,链式调用,清晰明了,而且有不错的调试信息。
- gorequest 是在原生库上做了一点简单的封装,优化调用体验。有篇中文文档可以参考:gorequest中文文档(非官方)
需要学习一下他的设计。官方文档说是借鉴 Node.js 的 SuperAgent。 - sling 也挺有特色的,使 API 变得结构化,调用变得像普通的 Go 函数一样。
- go-retryablehttp 在原生库上加了一个自动重试机制。
- heimdall, req, 简单一看,还看不出来有什么特别的地方。