Skip to content

响应处理

Fetch 提供了一个方便的 Response 对象来处理 HTTP 响应。

基本用法

go
response, err := fetch.Get("https://httpbin.zcorky.com/get")
if err != nil {
	panic(err)
}

// 获取状态码
status := response.Status

// 获取响应体作为字符串
body := response.String()

// 获取响应体作为 JSON
json, err := response.JSON()

JSON 解析

Fetch 使用 gjson 进行 JSON 解析,允许您在不反序列化的情况下访问嵌套值。

go
response, err := fetch.Get("https://httpbin.zcorky.com/get")

// 使用 gjson 语法访问 JSON 值
url := response.Get("url")
method := response.Get("method")

// 访问嵌套值
value := response.Get("data.user.name")

反序列化为结构体

go
type User struct {
	Name  string `json:"name"`
	Email string `json:"email"`
}

response, err := fetch.Get("https://api.example.com/users/1")

var user User
err = response.UnmarshalJSON(&user)

响应方法

状态检查

go
if response.Ok() {
	// 状态码为 2xx
}

获取状态信息

go
statusCode := response.StatusCode()
statusText := response.StatusText()

获取请求头

go
contentType := response.ContentType()
location := response.Location()
contentLength := response.ContentLength()

获取响应错误

go
if !response.Ok() {
	err := response.Error()
	// err 包含状态码和响应体
}

示例

go
response, err := fetch.Get("https://api.example.com/users/1")
if err != nil {
	panic(err)
}

if response.Ok() {
	var user User
	if err := response.UnmarshalJSON(&user); err != nil {
		panic(err)
	}
	fmt.Printf("用户: %s\n", user.Name)
} else {
	fmt.Printf("错误: %v\n", response.Error())
}