httpclient
之前介绍过 http server的写法。这次来看看 client怎么写
func main() {
resp, err := http.Get("https://www.baidu.com")
if err != nil {
panic(err)
}
defer resp.Body.Close()
s, err := httputil.DumpResponse(resp, true)
if err != nil {
panic(err)
}
fmt.Println(string(s))
}
我们请求一个百度首页 打印下他的返回
这里可能有人会奇怪 为啥要string(s) 来看下dump 这个函数 他返回的是一个byte数组 所以必须string 转一下,否则 这里展示的就是纯byte了
这里呢 我们当然也可以 设置 请求的header
func main() {
request,err:=http.NewRequest(http.MethodGet,"https://juejin.cn",nil)
request.Header.Add("user-agent","Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1")
resp, err := http.DefaultClient.Do(request)
if err != nil {
panic(err)
}
defer resp.Body.Close()
s, err := httputil.DumpResponse(resp, true)
if err != nil {
panic(err)
}
fmt.Println(string(s))
}
那同样的 我们也可以自定义client 来监听请求途中的 重定向 等轨迹行为
func main() {
request, err := http.NewRequest(http.MethodGet, "https://imooc.com", nil)
request.Header.Add("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1")
client := http.Client{
CheckRedirect: func(req *http.Request, via []*http.Request) error {
fmt.Println("redirect:", req)
return nil
},
}
resp, err := client.Do(request)
if err != nil {
panic(err)
}
defer resp.Body.Close()
s, err := httputil.DumpResponse(resp, true)
if err != nil {
panic(err)
}
fmt.Println(string(s))
}
可以看下日志打印
其他标准库简单介绍
godoc -http :8888
可以用上述命令开一个本地的http 文档
这个bufio 主要是提高写入io效率的,可以把数先写入缓存 然后最后一次行flush到硬盘中
开发者最常用的应该就是encoding json库了
时间库 也是常用的,比如说 超时 定时之类的
另外还有一些 string math rand 等这些其他语言中也有的库 大家可以自行利用godoc去学习
另外标准库我们还可以参考 studygolang.com/pkgdoc 中文翻译 来进行学习