安全发get请求需显式构造*http.client,设timeout=10秒、transport连接池参数(maxidleconns等≥50)、user-agent头,defer resp.body.close();中文乱码应优先用golang.org/x/net/html/charset.newreaderlabel()自动识别编码。

直接上手写 Golang 爬虫,核心就三步:发请求、解编码、提数据。跳过框架、不碰 JS 渲染,用 net/http + goquery 就能跑通 90% 的静态新闻/商品/列表页。
怎么用 http.Client 发出安全的 GET 请求
别用 http.Get() —— 它背后是 http.DefaultClient,没超时、没连接复用、没 UA,一并发就卡死或被秒封。
- 显式构造
*http.Client,必须设Timeout(建议 10 秒)和Transport参数 -
MaxIdleConns和MaxIdleConnsPerHost至少设为 50,否则高频请求会反复建连、触发too many open files - 每条请求都加
User-Agent头,值用真实浏览器标识,比如"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" - 记得
defer resp.Body.Close(),漏掉这句,爬几百页后程序大概率崩在文件描述符耗尽
client := &http.Client{
Timeout: 10 * time.Second,
Transport: &http.Transport{
MaxIdleConns: 50,
MaxIdleConnsPerHost: 50,
IdleConnTimeout: 30 * time.Second,
},
}
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64)")
resp, err := client.Do(req)
中文乱码怎么解?别信 Content-Type 和 meta charset
很多新闻站 HTML 里写 <meta charset="gb2312">锛
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











