发起请求
import "github.com/sohaha/zlsgo/zhttp"
data, err := zhttp.Get(url, param...)
// data, err := zhttp.Post(url, param...)
// data, err := zhttp.Put(url, param...)
// ...
// data, err := zhttp.Do("Get", url, param...)
// 获取结果
res := data.String()
// 获取 HTML 解析
res := data.HTML()
传递参数
// 发送 Get 数据
data := zhttp.QueryParam{
"say":"hi",
}
data, err := zhttp.Get(url, data)
// 发送 Post 数据
data := zhttp.Param{
"say":"hi",
}
data, err := zhttp.Post(url, data)
// 设置 Header
header := zhttp.Header{
"X-TOKEN":"666",
}
data, err := zhttp.Get(url, data, header)
// 发送 JSON
json := `{"name":"hi"}` // json 字符串
// json := &j{"name":"hi"} // 结构体
// 使用 BodyJSON 包裹可以无需手动设置 Content-Type
data, err := zhttp.Post(url, zhttp.BodyJSON(json))
// 其他
zhttp.Get(url, []byte, string, bytes.Buffer...)
获取结果集
data, err := zhttp.Get(url)
// 获取结果
res := data.String()
// 获取 HTML 解析
res := data.HTML()
// 获取 zjson 对象
res := data.JSONs()
// 获取 json 某值
value := data.JSON(key).String()
设置 Header
header := zhttp.Header{"Content-Type": "application/json"}
data, err := zhttp.Post(url, header)
文件上传/下载
// 默认情况 请求超时是 10 分钟,如果上传/下载文件过大建议延长超时时间
zhttp.SetTimeout(time.Hour * 2)
// 上传示例
file := zhttp.File("file.png") // 要上传的文件
fileOthe := zhttp.File("file*.png","字段名,默认:media")
zhttp.Post(url, file, fileOthe, zhttp.UploadProgress(func(current, total int64) {
fmt.Println(float32(current)/float32(total)*100, "%") // 上传进度
}))
// 关闭分块处理,关闭后无法获取上传进度
// 默认情况上传会使用分块但是对于服务端不支持的时候可以关闭,比如微信接口
zhttp.DisableChunke()
// 下载示例
res, _ := zhttp.Get(url, zhttp.DownloadProgress(func(current, total int64) {
fmt.Println(float32(current)/float32(total)*100, "%") // 下载进度
}))
// 保存文件
res.ToFile("file.png")
请求超时
zhttp.SetTimeout(60 * time.Second)
// 也可以直接使用 context
ctx, cancel := context.WithTimeout(context.Background(), 60 * time.Second)
defer cancel()
zhttp.Get(url, ctx)
SSE 流请求
sse := zhttp.SSE("<http://127.0.0.1:3788/sse>")
go func() {
time.Sleep(time.Second * 15)
// Manual close
sse.Close()
}()
sseFor:
for {
select {
case <-sse.Done():
break sseFor
case ev := <-sse.Event():
fmt.Printf("id:%s msg:%s [%s]\\n", ev.ID, string(ev.Data), ev.Event)
}
}
设置 UserAgent
zhttp.SetUserAgent(func() string {
// 返回空表示从内置 UA 列表(zhttp.UserAgentLists)随机一个
return ""
})
设置代理