基本介绍

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 编码。

HTTPClient - 图1注意

请使用给定的方法创建 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 对象。

相关文档

📄️ HTTPClient-基本使用使用GoFrame框架通过基本的HTTP客户端操作来发送GET、POST、DELETE请求,并处理返回值。本文还讨论了如何使用POST方法发送JSON数据、使用多参数、map类型参数进行请求。同时,提供了*Bytes、*Content和*Var方法的简要介绍,以帮助开发者更便捷地处理HTTP请求和响应内容。

📄️ HTTPClient-文件上传使用GoFrame框架进行HTTP客户端文件上传,实现了方便的文件上传功能,并提供了三个主要的接口以支持单个和多个文件的上传。详细讲解了服务端及客户端的实现代码,并提供了自定义文件名称和规范路由接收上传文件的方法,适用于需要集成文件上传功能的开发场景。

📄️ HTTPClient-自定义Cookie在使用GoFrame框架的HTTP客户端中自定义发送给服务端的Cookie内容,主要通过SetCookie和SetCookieMap方法实现。通过简单的服务端和客户端示例展示了如何设置与接收自定义的Cookie参数,实现HTTP客户端的个性化请求。

📄️ HTTPClient-自定义Header通过GoFrame框架的HTTPClient功能,用户可以自定义HTTP请求的Header信息。本文介绍了如何利用SetHeader、SetHeaderMap和SetHeaderRaw等方法设置和发送Header,从而实现自定义链路跟踪信息,如Span-Id和Trace-Id。通过简单的代码示例,展示了客户端如何与服务端交互并返回结果。

📄️ HTTPClient-自定义ContentType在GoFrame框架中使用HTTPClient自定义请求的ContentType。通过不同的操作方法如ContentJson和ContentXml,可以设置请求的Content-Type分别为application/json和application/xml。同时也提供了自定义ContentType的方法例子,帮助开发者灵活设置请求参数和编码方式,以满足不同的API请求需求。

📄️ HTTPClient-自定义Transport在GoFrame框架中,通过自定义Transport实现HTTPClient的高级用法。包括使用Unix Socket进行客户端与服务端通信的方法,以及设置客户端连接池大小参数的具体实现。示例提供了大量真实代码片段,帮助开发者更好地理解并应用这些技术。

📄️ HTTPClient-请求信息打印使用GoFrame框架中的HTTP客户端功能获取和打印HTTP请求的原始输入和输出信息。主要方法包括Raw、RawDump、RawRequest和RawResponse,适用于调试HTTP请求。示例展示了使用GoFrame框架发送POST请求并打印请求和响应的具体方法。

📄️ HTTPClient-代理Proxy设置在GoFrame框架的HTTP客户端中设置代理服务器地址,支持http和socks5两种形式。通过SetProxy和Proxy方法,用户可以轻松配置代理,实现对外网资源的访问,包括普通调用示例和链式调用示例,帮助用户快速掌握代理功能的使用。

📄️ HTTPClient-拦截器/中间件GoFrame框架中的HTTPClient拦截器/中间件特性,可用于全局请求拦截和参数校验。通过中间件,开发者可以在请求的前置和后置阶段插入自定义逻辑,修改提交参数或返回参数,实现签名参数注入等功能,确保接口参数的安全性。

📄️ HTTPClient-常见问题解释如何有效使用GoFrame框架中的gclient.Client对象,以提高效率和降低资源使用。包含gclient.Client对象复用的建议以及如何处理非法字符问题,通过示例演示设置正确的ContentType。

📄️ HTTPClient-监控指标HTTP客户端的监控指标功能,默认情况下是关闭状态,以免影响性能。它提供了多种指标供用户参考,如请求执行的时间开销、连接创建时间以及请求的字节总大小等,只有在metric特性全局开启时才会启用这些指标,帮助用户更好地进行性能分析。