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 的官方文档 。