Go 语言中用于发起 HTTP 请求的库有很多,其中 go-resty
是一个流行的第三方库,它提供了简单的 HTTP 和 REST 客户端功能。以下是一些关于 go-resty
的使用示例:
创建客户端:
client := resty.New()
发送 GET 请求:
resp, err := client.R().Get("http://httpbin.org/get")
发送 POST 请求:
resp, err := client.R().
SetHeader("Content-Type", "application/json").
SetBody(map[string]interface{}{"username": "testuser", "password": "testpass"}).
Post("https://myapp.com/login")
发送带查询参数的请求:
resp, err := client.R().
SetQueryParams(map[string]string{
"page_no": "1",
"limit": "20",
"sort": "name",
"order": "asc",
}).Get("/search_result")
上传文件:
fileBytes, _ := ioutil.ReadFile("/path/to/file")
resp, err := client.R().
SetBody(fileBytes).
Post("https://content.dropboxapi.com/1/files_put/auto/resty/mydocument.pdf")
设置客户端证书:
cert, err := tls.LoadX509KeyPair("certs/client.pem", "certs/client.key")
if err != nil {
log.Fatalf("ERROR loading client certificate: %s", err)
}
client.SetCertificates(cert)
设置根证书:
client.SetRootCertificate("/path/to/root/pemFile.pem")
错误处理:
type AuthError struct {
Error string
}
resp, err := client.R().
SetResult(AuthSuccess{}).
Post("https://myapp.com/login")
if err != nil {
// 处理错误
}
响应处理:
fmt.Printf("\nError: %v\n", err)
fmt.Printf("Response Status Code: %v\n", resp.StatusCode())
fmt.Printf("Response Body: %v\n", resp)
go-resty
支持几乎所有的 HTTP 方法,并且提供了链式调用的简洁语法。它还支持自动解析 JSON 和 XML 类型的文档,上传文件,重试功能,以及客户端测试功能。更多详细信息和高级用法,请参考 go-resty
的官方文档 。