学习go中的Resty, 比标准库net/http更加方便友好

server/2024/12/21 12:53:16/
http://www.w3.org/2000/svg" style="display: none;">

Resty 是 Go 语言中一个轻量级、简洁易用的 HTTP 客户端库。它的目标是提供一个简洁且易于使用的 API,以便进行常见的 HTTP 请求(如 GET、POST、PUT、DELETE 等)。如果你在 Go 项目中需要进行 HTTP 请求,可以考虑使用 Resty,因为它封装了很多常见操作,减少了开发者的重复工作。
安装 Resty
首先,你需要安装 Resty 包。可以使用以下命令:
go get github.com/go-resty/resty/v2

使用示例
以下是一个简单的 Resty 使用示例,展示了如何进行常见的 HTTP 请求操作。

  1. 创建一个基本的 Resty 客户端
package mainimport ("fmt""log""github.com/go-resty/resty/v2"
)func main() {// 创建 Resty 客户端client := resty.New()// 发送 GET 请求resp, err := client.R().Get("https://jsonplaceholder.typicode.com/todos/1")if err != nil {log.Fatalf("Error: %v", err)}// 打印响应状态和响应体fmt.Println("Response Status Code:", resp.StatusCode())fmt.Println("Response Body:", resp.String())
}
  1. 发送 POST 请求
    你可以发送 JSON 或表单数据。以下是一个 POST 请求的例子。
package mainimport ("fmt""log""github.com/go-resty/resty/v2"
)func main() {client := resty.New()// 构造 POST 请求并发送 JSON 数据resp, err := client.R().SetHeader("Content-Type", "application/json").SetBody(`{"title": "foo", "body": "bar", "userId": 1}`).Post("https://jsonplaceholder.typicode.com/posts")if err != nil {log.Fatalf("Error: %v", err)}fmt.Println("Response Status Code:", resp.StatusCode())fmt.Println("Response Body:", resp.String())
}
  1. 处理 JSON 响应
    Resty 会自动解析 JSON 响应并将其映射到你提供的结构体中。
package mainimport ("fmt""log""github.com/go-resty/resty/v2"
)// 定义响应数据结构
type Todo struct {UserID int    `json:"userId"`ID     int    `json:"id"`Title  string `json:"title"`Completed bool `json:"completed"`
}func main() {client := resty.New()var todo Todo// 发送 GET 请求并将 JSON 响应解析到结构体resp, err := client.R().SetResult(&todo).Get("https://jsonplaceholder.typicode.com/todos/1")if err != nil {log.Fatalf("Error: %v", err)}fmt.Println("Response Status Code:", resp.StatusCode())fmt.Printf("Response Body: %+v\n", todo)
}
  1. 发送带有 URL 参数的请求
package mainimport ("fmt""log""github.com/go-resty/resty/v2"
)func main() {client := resty.New()// 发送带有 URL 参数的 GET 请求resp, err := client.R().SetQueryParam("postId", "1").Get("https://jsonplaceholder.typicode.com/comments")if err != nil {log.Fatalf("Error: %v", err)}fmt.Println("Response Status Code:", resp.StatusCode())fmt.Println("Response Body:", resp.String())
}
  1. 处理表单提交
package mainimport ("fmt""log""github.com/go-resty/resty/v2"
)func main() {client := resty.New()// 发送表单数据resp, err := client.R().SetFormData(map[string]string{"username": "testuser","password": "password123",}).Post("https://example.com/login")if err != nil {log.Fatalf("Error: %v", err)}fmt.Println("Response Status Code:", resp.StatusCode())fmt.Println("Response Body:", resp.String())
}

Resty 常用功能

1.设置 Header:
可以通过 SetHeader 方法设置请求头。

client.R().SetHeader("Authorization", "Bearer your_token")

2.设置查询参数:
通过 SetQueryParam 设置 URL 查询参数。

 client.R().SetQueryParam("id", "123")

3.设置请求体:
使用 SetBody 设置请求的内容。

   client.R().SetBody("some data").Post("https://example.com")

4.自动处理 JSON:
Resty 自动解析 JSON 响应并将其映射到结构体。

   var result struct {Name string `json:"name"`}client.R().SetResult(&result).Get("https://api.example.com/data")

5.设置认证:
支持基本认证和 Bearer Token。

  client.R().SetBasicAuth("username", "password")client.R().SetAuthToken("your_bearer_token")

6.重试机制:
Resty 也支持设置请求重试机制。

  client.SetRetryCount(3)client.SetRetryWaitTime(5 * time.Second)

总结
Resty 是一个功能强大且易于使用的 Go HTTP 客户端库,适用于开发中经常需要进行 HTTP 请求的场景。它通过简洁的 API 提供了对 JSON、表单数据、URL 参数等的处理支持,同时也能够进行请求头设置、认证、重试等功能。


http://www.ppmy.cn/server/151944.html

相关文章

数据结构之旅:红黑树如何驱动 Set 和 Map

一、红黑树 1、定义 红黑树是一种二叉搜索树,在每个节点上增加一个存储位表示结点的颜色(红色或者黑色)。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保不会有一条路径比其他路径长出两倍,因而这种树是一种接近平衡的…

人脸修复与增强腾讯开源项目GFPGAN介绍

GFPGAN 简述 GFPGAN (Generative Facial Prior GAN) 是一种基于生成对抗网络(GAN)的面部图像修复与增强模型。它由腾讯 ARC Lab 的研究团队开发,目的是以高效和高质量的方式修复低分辨率、受损或老化的人脸图像,同时保留其真实感和…

智能编排,精准掌控:Agent编排如何实现精细化权限控制

Agent编排产品以其灵活的接口调用和直观的图表展示功能,为企业的快速功能集成和数据可视化提供了极大的便利。然而,在企业中系统对接和数据共享的安全问题至关重要,许多用户在使用传统的Agent编排产品时,仍然面临以下问题 接口暴…

探索 OpenTofu:开源基础设施即代码工具

引言 在现代云计算和 DevOps 实践中,基础设施即代码(IaC)已经成为不可或缺的一部分。它使得基础设施的管理更加自动化、可重复和可维护。HashiCorp 的 Terraform 是这一领域的领先工具,但随着时间的推移,开源社区也开始关注其许可证的变更。OpenTofu 作为 Terraform 的一…

【已解决】启动此实时调试器时未使用必需的安全权限。要调试该进程,必须以管理员身份运行此实时调试器。是否调试该进程?

【已解决】启动此实时调试器时未使用必需的安全权限。要调试该进程,必须以管理员身份运行此实时调试器。是否调试该进程? 目录一、前言二、具体原因三、解决方法 目录 报错截图 一、前言 进行应用程序开发时,需要对w3wp进行附加调试等场景&#xff…

我在华为的安全日常

在华为工作了数年后,我养成了一个习惯:每次离开座位,即便是去卫生间,我也会条件反射地锁屏电脑。晚上回到家,躺在床上,脑海中偶尔会闪过一丝疑虑:办公室的门窗是否关好?虽然这种担忧…

千亿级市场新机遇,品牌如何紧跟“宠”爱趋势创新宠物营销?

“世界破破烂烂,小狗缝缝补补”。在这个快节奏、高压力的社会中,宠物因其可爱的属性已经成为不少年轻人的“精神布洛芬”。 随着宠物经济的蓬勃发展,宠物营销已成为品牌竞相探索的新蓝海。那么,面对这一充满机遇的市场&#xff0…

鸿蒙项目云捐助第二十讲云捐助项目物联网IOT的使用

鸿蒙项目云捐助第二十讲云捐助项目物联网IOT的使用 在鸿蒙技术完成云捐助项目中,物联网技术也是具有一定生命力的存在。这里也会在云捐助项目中使用物联网的技术。 一、华为云IoT物联网操作 这里以华为云的Iot物联网操作来介绍华为云I ot物联网技术。 这里从百度…