发起请求

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 ""
})

设置代理