golang,go,博客,开源,编程
今天介绍一个可以跟fasthttp比肩的http库imroc/req
imroc/req
是一个用于 Golang 的 HTTP 请求客户端库,其设计理念类似于 Python 的 Requests 库。该库提供了简单、直观的 API,使得开发者能够快速构造并发送 HTTP 请求,同时方便地处理响应数据。它适用于处理各种常见的 HTTP 请求场景,包括 GET、POST、PUT、DELETE 等,同时支持 JSON、表单数据、文件上传等多种内容类型。
使用 go get 命令即可安装该库:
go get -u github.com/imroc/req
下面示例展示了如何使用 req
发送一个 GET 请求,并将返回的 JSON 数据解析到一个 Map 中:
package main
import (
"fmt"
"log"
"github.com/imroc/req"
)
func main() {
// 发送 GET 请求,并带上自定义 Header
resp, err := req.Get("https://httpbin.org/get", req.Header{
"User-Agent": "imroc-req",
})
if err != nil {
log.Fatalf("请求失败: %v", err)
}
// 将响应的 JSON 数据解析到 map 中
var result map[string]interface{}
err = resp.ToJSON(&result)
if err != nil {
log.Fatalf("解析 JSON 失败: %v", err)
}
fmt.Println("GET 请求返回数据:", result)
}
使用 POST 请求时,可以通过内置方法自动将数据编码为 JSON 或表单数据:
package main
import (
"fmt"
"log"
"github.com/imroc/req"
)
func main() {
// 构造 JSON 请求体
payload := req.BodyJSON(map[string]string{
"name": "imroc",
"lang": "go",
})
// 发送 POST 请求
resp, err := req.Post("https://httpbin.org/post", payload)
if err != nil {
log.Fatalf("请求失败: %v", err)
}
// 输出响应内容
fmt.Println("POST 请求返回:", resp)
}
通过 multipart 表单上传文件同样十分简单:
package main
import (
"fmt"
"log"
"os"
"github.com/imroc/req"
)
func main() {
// 打开需要上传的文件
file, err := os.Open("example.txt")
if err != nil {
log.Fatalf("打开文件失败: %v", err)
}
defer file.Close()
// 构造 multipart/form-data 的请求体,其中 req.File 用于指定文件内容及文件名
payload := req.BodyFormMultipart(req.Param{
"file": req.File{
File: file,
FileName: "example.txt",
},
"description": "这是一个文件上传示例",
})
// 发送 POST 请求
resp, err := req.Post("https://httpbin.org/post", payload)
if err != nil {
log.Fatalf("请求失败: %v", err)
}
fmt.Println("文件上传返回:", resp)
}
可以通过 req.SetTimeout
、req.SetProxy
等方法设置全局超时或者代理。例如:
package main
import (
"fmt"
"log"
"time"
"github.com/imroc/req"
)
func main() {
// 设置请求超时时间为 10 秒
req.SetTimeout(10 * time.Second)
// 设置 HTTP 代理
req.SetProxy("http://127.0.0.1:8080")
resp, err := req.Get("https://httpbin.org/get")
if err != nil {
log.Fatalf("请求失败: %v", err)
}
fmt.Println("返回结果:", resp)
}
如果有需要为每个请求添加一些公共 Header 或 Cookie,也可以通过设置全局配置来实现:
package main
import (
"fmt"
"log"
"github.com/imroc/req"
)
func main() {
// 设置全局 Header
req.SetCommonHeader(req.Header{
"Authorization": "Bearer your-token",
"Accept": "application/json",
})
// 设置全局 Cookie
req.SetCommonCookie("sessionid=your-session-id")
resp, err := req.Get("https://httpbin.org/get")
if err != nil {
log.Fatalf("请求失败: %v", err)
}
fmt.Println("全局 Header 和 Cookie 返回:", resp)
}
在开发过程中,如果需要查看请求和响应的详细信息,可以开启调试模式:
package main
import (
"github.com/imroc/req"
)
func main() {
// 开启调试模式,会打印详细的请求和响应日志
req.Debug = true
_, _ = req.Get("https://httpbin.org/get")
}
imroc/req
以简洁直观的 API 帮助开发者快速发送 HTTP 请求,类似于 Python 的 Requests 库,降低了使用门槛。总体而言,imroc/req
是一个轻量级且功能强大的 HTTP 客户端库,非常适合在 Golang 项目中使用。