基本介绍

GoFrame框架提供了强大便捷易用的HTTP客户端,由gclient组件实现,对象创建可以通过gclient.New()包方法,也可以通过g.Client()方法调用。推荐使用g.Client()来便捷地创建HTTP客户端对象。由于gclient.Client内部封装扩展于标准库的http.Client对象,因此标准库http.Client有的特性,gclient.Client也是支持的。

方法列表https://pkg.go.dev/github.com/gogf/gf/v2/net/gclient

简要说明

  1. 我们可以使用New创建一个自定义的HTTP客户端对象Client,随后可以使用该对象执行请求,该对象底层使用了连接池设计,因此没有Close关闭方法。HTTP客户端对象也可以通过g.Client()快捷方法创建。
  2. 客户端提供了一系列以HTTP Method命名的方法,调用这些方法将会发起对应的HTTP Method请求。常用的方法是GetPost方法,同时DoRequest是核心的请求方法,用户可以调用该方法实现自定义的HTTP Method发送请求。
  3. 请求返回结果为*ClientResponse对象,可以通过该结果对象获取对应的返回结果,通过ReadAll/ReadAllString方法可以获得返回的内容,该对象在使用完毕后需要通过Close方法关闭,防止内存溢出。
  4. *Bytes方法用于获得服务端返回的二进制数据,如果请求失败返回nil*Content方法用于请求获得字符串结果数据,如果请求失败返回空字符串;Set*方法用于Client的参数设置。
  5. *Var方法直接请求并获取HTTP接口结果为泛型类型便于转换。如果请求失败或者请求结果为空,会返回一个空的g.Var泛型对象,不影响转换方法调用。
  6. 可以看到,客户端的请求参数的数据参数data数据类型为interface{}类型,也就是说可以传递任意的数据类型,常见的参数数据类型为string/map,如果参数为map类型,参数值将会被自动urlencode编码。

请使用给定的方法创建Client对象,而不要使用new(ghttp.Client)或者&ghttp.Client{}创建客户端对象,否则,哼哼。

链式操作

GoFrame框架的客户端支持便捷的链式操作,常用方法如下(文档方法列表可能滞后于源码,建议查看接口文档或源码 https://pkg.go.dev/github.com/gogf/gf/v2/net/gclient):

  1. func (c *Client) Timeout(t time.Duration) *Client
  2. func (c *Client) Cookie(m map[string]string) *Client
  3. func (c *Client) Header(m map[string]string) *Client
  4. func (c *Client) HeaderRaw(headers string) *Client
  5. func (c *Client) ContentType(contentType string) *Client
  6. func (c *Client) ContentJson() *Client
  7. func (c *Client) ContentXml() *Client
  8. func (c *Client) BasicAuth(user, pass string) *Client
  9. func (c *Client) Retry(retryCount int, retryInterval time.Duration) *Client
  10. func (c *Client) Prefix(prefix string) *Client
  11. func (c *Client) Proxy(proxyURL string) *Client
  12. func (c *Client) RedirectLimit(redirectLimit int) *Client
  13. func (c *Client) Dump(dump ...bool) *Client
  14. func (c *Client) Use(handlers ...HandlerFunc) *Client

简要说明:

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

返回对象

gclient.Response为HTTP对应请求的返回结果对象,该对象继承于http.Response,可以使用http.Response的所有方法。在此基础之上增加了以下几个方法:

  1. func (r *Response) GetCookie(key string) string
  2. func (r *Response) GetCookieMap() map[string]string
  3. func (r *Response) Raw() string
  4. func (r *Response) RawDump()
  5. func (r *Response) RawRequest() string
  6. func (r *Response) RawResponse() string
  7. func (r *Response) ReadAll() []byte
  8. func (r *Response) ReadAllString() string
  9. func (r *Response) Close() error

这里也要提醒的是,Response需要手动调用Close方法关闭,也就是说,不管你使用不使用返回的Response对象,你都需要将该返回对象赋值给一个变量,并且手动调用其Close方法进行关闭(往往使用defer r.Close()),否则会造成文件句柄溢出、内存溢出。

重要说明

  1. ghttp客户端默认关闭了KeepAlive功能以及对服务端TLS证书的校验功能,如果需要启用可自定义客户端的Transport属性。
  2. 连接池参数设定连接代理设置等这些高级功能也可以通过自定义客户端的Transport属性实现,该数据继承于标准库的http.Transport对象。

相关文档