go-resty原生支持 HTTPS,并且提供了丰富的 TLS 配置选项来满足你的安全通信需求 。
无论你是想直接使用默认配置发起安全请求,还是需要配置 mTLS(双向认证)、自定义 CA 证书等高级功能,go-resty都提供了对应的 API。
核心用法
1. 基本 HTTPS 请求
直接使用https://开头的 URL 即可。go-resty会自动完成 TLS 握手并建立安全连接 。
go
package main import ( "fmt" "github.com/go-resty/resty/v2" ) func main() { client := resty.New() resp, err := client.R().Get("https://api.example.com/data") if err != nil { fmt.Println("请求错误:", err) return } fmt.Println("状态码:", resp.StatusCode()) fmt.Println("响应体:", string(resp.Body())) }注意:如果在代码中同时配置了认证信息(如
SetAuthToken),go-resty会智能检查是否在使用 HTTPS,并给出安全提示,这符合它的安全设计理念 。
2. 配置 TLS(跳过验证 / 自定义证书)
你可以通过SetTLSClientConfig方法,传入 Go 标准的tls.Config结构体来自定义 TLS 行为 。
跳过证书验证(仅限开发/测试环境):
go
client.SetTLSClientConfig(&tls.Config{ InsecureSkipVerify: true, // 仅用于测试,生产环境绝对不要开启 })使用客户端证书(mTLS):
如果你的服务端要求客户端提供证书进行身份认证,可以通过SetCertificates方法加载证书和私钥 。go
import "crypto/tls" cert, _ := tls.LoadX509KeyPair("client-cert.pem", "client-key.pem") client.SetCertificates(cert)添加自定义根 CA:
如果服务端使用的是自签名证书或内部 CA 签发的证书,需要将对应的 CA 证书添加到客户端的信任池中 。go
client.SetRootCertificates("/path/to/custom-ca.pem")
生产环境建议
为了保障通信安全,在生产环境中请遵循以下最佳实践 :
强制证书验证:确保
InsecureSkipVerify保持默认的false,不要跳过证书验证 。限制 TLS 版本:建议强制使用 TLS 1.2 或 TLS 1.3,禁用不安全的旧版本 。
go
client.SetTLSClientConfig(&tls.Config{ MinVersion: tls.VersionTLS12, })使用证书自动更新:对于证书会定期轮转的场景,可以使用
SetRootCertificatesWatcher方法,它会自动监测证书文件变更并热加载,避免应用重启