链式操作

GF框架的客户端支持便捷的链式操作,常用方法如下:

  1. func (c *Client) Ctx(ctx context.Context) *Client
  2. func (c *Client) Timeout(t time.Duration) *Client
  3. func (c *Client) Cookie(m map[string]string) *Client
  4. func (c *Client) Header(m map[string]string) *Client
  5. func (c *Client) HeaderRaw(headers string) *Client
  6. func (c *Client) ContentType(contentType string) *Client
  7. func (c *Client) ContentJson() *Client
  8. func (c *Client) ContentXml() *Client
  9. func (c *Client) BasicAuth(user, pass string) *Client
  10. func (c *Client) Retry(retryCount int, retryInterval time.Duration) *Client
  11. func (c *Client) Proxy(proxyURL string) *Client
  12. func (c *Client) RedirectLimit(redirectLimit int) *Client

简要说明:

  1. Timeout方法用于设置当前请求超时时间。
  2. Ctx方法用于设置当前请求的上下文对象context.Context
  3. Cookie方法用于设置当前请求的自定义Cookie信息。
  4. Header*方法用于设置当前请求的自定义Header信息。
  5. Content*方法用于设置当前请求的Content-Type信息,并且支持根据该信息自动检查提交参数并自动编码。
  6. BasicAuth方法用于设置HTTP Basic Auth校验信息。
  7. Retry方法用于设置请求失败时重连次数和重连间隔。
  8. Proxy方法用于设置http访问代理。
  9. RedirectLimit方法用于限制重定向跳转次数。

使用示例

示例1,请求超时控制

  1. g.Client().Timeout(3*time.Second).GetContent("http://user.svc/v1/user/info/1")
  1. g.Client().Timeout(10*time.Second).PostContent("http://order.svc/v1/order/create", g.Map{
  2. "uid" : 1,
  3. "sku_id" : 10000,
  4. "amount" : 19.99,
  5. "create_time" : "2020-03-26 12:00:00",
  6. })

示例2,自定义Cookie

  1. g.Client().Cookie("sessionid", "MNV5432PIY76").GetContent("http://user.svc/v1/user/info/1")

示例3,自定义Header

  1. g.Client().Header("Trace-Id", "XVF654RT98UJNMN641V06Y").GetContent("http://user.svc/v1/user/info/1")
  1. g.Client().HeaderRaw(`
  2. Referer: https://goframe.org/
  3. User-Agent: MyTesyClient
  4. `).GetContent("http://user.svc/v1/user/info")

示例4,提交Json请求

  1. g.Client().ContentJson().PostContent("http://order.svc/v1/order/create", g.Map{
  2. "uid" : 1,
  3. "sku_id" : 10000,
  4. "amount" : 19.99,
  5. "create_time" : "2020-03-26 12:00:00",
  6. })

该请求将会将Content-Type设置为application/json,并且将提交参数自动编码为Json:

  1. {"uid":1,"sku_id":10000,"amount":19.99,"create_time":"2020-03-26 12:00:00"}

示例5,提交Xml请求

  1. g.Client().ContentXml().PostContent("http://order.svc/v1/order/create", g.Map{
  2. "uid" : 1,
  3. "sku_id" : 10000,
  4. "amount" : 19.99,
  5. "create_time" : "2020-03-26 12:00:00",
  6. })

该请求将会将Content-Type设置为application/xml,并且将提交参数自动编码为Xml:

  1. <doc><amount>19.99</amount><create_time>2020-03-26 12:00:00</create_time><sku_id>10000</sku_id><uid>1</uid></doc>