通过 client.GET(url) 等方法创建 RequestBuilder,然后链式配置:
resp, err := client.GET("https://api.example.com/users").
SetHeader("Accept", "application/json").
SetQueryParam("page", "1").
Execute()ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
resp, err := client.GET("https://api.example.com/data").
WithContext(ctx).
Execute()默认使用 context.Background()。
// 设置单个 Header (覆盖已有的)
client.GET(url).SetHeader("Authorization", "Bearer xxx")
// 添加 Header (保留已有值)
client.GET(url).AddHeader("X-Trace", "id1").AddHeader("X-Trace", "id2")
// 批量设置
client.GET(url).SetHeaders(map[string]string{
"Accept": "application/json",
"User-Agent": "my-app/1.0",
})// 设置 (覆盖)
client.GET(url).SetQueryParam("lang", "zh")
// 添加 (多值)
client.GET(url).AddQueryParam("tag", "go").AddQueryParam("tag", "net/http")
// 批量设置
client.GET(url).SetQueryParams(map[string]string{
"page": "1",
"size": "20",
})Query 参数会与 URL 中已有的 query 合并,AddQueryParam 的值会追加。
// io.Reader
client.POST(url).SetBody(strings.NewReader("raw data"))
// []byte
client.POST(url).SetRawBody([]byte(`{"key":"value"}`))body := map[string]string{"name": "touka"}
builder, err := client.POST(url).SetJSONBody(body)- 自动设置
Content-Type: application/json - 使用
io.Pipe()流式写入
body := MyStruct{Field: "value"}
builder, err := client.POST(url).SetXMLBody(body)- 自动设置
Content-Type: application/xml - 使用缓冲池编码
builder, err := client.POST(url).SetGOBBody(myData)- 自动设置
Content-Type: application/octet-stream - 使用缓冲池编码
仅构建 *http.Request,不执行:
req, err := client.GET(url).Build()合并逻辑:
- 解析 URL
- 合并 Query 参数 (URL 原有 + builder 添加)
- 合并 Header (builder 覆盖)
- 如果未设置
User-Agent且未调用NoDefaultHeaders(),注入默认 UA
构建并执行,返回 *http.Response:
resp, err := client.GET(url).Execute()一步完成执行 + 解码,自动关闭响应体:
// JSON
var user User
err := client.GET(url).DecodeJSON(&user)
// XML
var config Config
err := client.GET(url).DecodeXML(&config)
// GOB
var data MyData
err := client.GET(url).DecodeGOB(&data)
// Text
text, err := client.GET(url).Text()
// Bytes
body, err := client.GET(url).Bytes()禁用默认 Header (如 User-Agent):
client.GET(url).NoDefaultHeaders().Build()SetJSONBody()使用io.Pipe(),body 不可重读,会影响重试行为SetXMLBody()和SetGOBBody()使用缓冲池编码,body 可重读,支持重试SetRawBody()和SetBody()使用bytes.Reader或自定义 Reader,重试取决于 Reader 是否支持GetBodyBuild()返回的*http.Request是一个独立副本,可以单独使用或传给Do()