course/HTTP/http_client_disable_keepali...

53 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
// 全局公用链接,请求频率比较频繁
//var (
// client = http.Client{
// Transport: &http.Transport{DisableKeepAlives: false},
// }
//)
func main() {
apiUrl := "http://127.0.0.1:9090/query"
apiParseUrl, err := url.Parse(apiUrl) //url不带参数传入返回一个结构体
if err != nil {
fmt.Println("url parse err:", err)
}
data := url.Values{}
data.Set("name", "王奥")
data.Set("age", "18") //set url中带参的数据
paramStr := data.Encode() //编码
apiParseUrl.RawQuery = paramStr //赋值到url的结构体中,组成完整的url编码对象
//自定义client 禁用keepalive 适用于请求频率不频繁,每次请求生成一个短链接,之后释放
tr := http.Transport{DisableKeepAlives: true} //短链接
client := http.Client{
Transport: &tr,
}
//生成请求对象
req, err := http.NewRequest("GET", apiParseUrl.String(), nil)
if err != nil {
fmt.Println("start new req err:", err)
}
//如果使用默认client
//http.DefaultClient.Do(req)
//发送自定义请求
resp, err := client.Do(req)
if err != nil {
return
}
defer resp.Body.Close() //关闭请求体
//读取返回体
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("read resp body err:", err)
}
fmt.Println("resp body:", string(body))
}