HTTP请求的发送与接收

42 阅读1分钟

在Go语言中访问第三方接口通常涉及到HTTP请求的发送与接收。Go的标准库net/http提供了强大的工具来实现这一功能。下面是一些基本的步骤和示例,帮助你使用Go语言访问第三方接口。

使用http.Get发送GET请求

func main() {
    response, err := http.Get("https://api.example.com/data")
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    defer response.Body.Close()

    body, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println("Error reading response body:", err)
        return
    }

    fmt.Println(string(body))
}

使用http.NewRequest发送POST请求

/* resp, err := http.Post(
    "https://api.example.com/login",
    "application/json",
    strings.NewReader(requestBody),
) */
func main() {
    url := "https://api.example.com/data"
    method := "POST"

    payload := strings.NewReader(`{"key":"value"}`)

    client := &http.Client{}
    req, err := http.NewRequest(method, url, payload)

    if err != nil {
        fmt.Println(err)
        return
    }

    req.Header.Add("Content-Type", "application/json")

    res, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer res.Body.Close()

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        fmt.Println("Error reading response body:", err)
        return
    }

    fmt.Println(string(body))
}

处理JSON响应

import (
    "encoding/json"
)

type ResponseData struct {
    Key string `json:"key"` // 根据实际返回的JSON结构定义字段和类型
}

func main() {
    // 发送HTTP请求... (如上所示)
    // ... 读取响应体到body变量 ... 确保body是[]byte类型。
    var data ResponseData
    err := json.Unmarshal(body, &data) // 解析JSON到结构体中。
    if err != nil {
        fmt.Println("Error parsing JSON:", err)
        return
    }
    fmt.Println(data) // 输出结构体中的数据。
}