当前位置: 首页 > article >正文

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

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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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.kler.cn/a/447103.html

相关文章:

  • 【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)
  • 0基础学前端-----CSS DAY9
  • ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程
  • 3D Gaussian Splatting for Real-Time Radiance Field Rendering-简洁版
  • python:用 sklearn 构建线性回归模型,并评价
  • 空天地遥感数据识别与计算--数据分析如何助力农林牧渔、城市发展、地质灾害监测等行业革新
  • 最大转矩电流比(MTPA)
  • uniapp入门 01创建项目模版
  • 融合注意力机制的卷积神经网络-双向长短期记忆网络(CNN-BiLSTM-Attention)的多变量/时间序列预测/matlab代码
  • C:\Windows 文件夹
  • 大模型微调---Lora微调实战
  • jsp中的四个域对象(Spring MVC)
  • 浅谈目前我开发的前端项目用到的设计模式
  • 爬取Q房二手房房源信息
  • Partition Strategies kafka分区策略
  • <项目代码>YOLO Visdrone航拍目标识别<目标检测>
  • GESP CCF python二级编程等级考试认证真题 2024年12月
  • 基于微信小程序的绘画学习平台
  • 攻防世界easyphp
  • Leetcode中最常用的Java API——util包
  • LeetCode hot100-90
  • 纯css 实现呼吸灯效果
  • TCP/IP协议:网际层相关知识梳理
  • metasploit之ms17_010_psexec模块
  • MapBox实现深蓝色科技风格底图方案
  • android studio更改应用图片,和应用名字。