📜  golang 发布请求 (1)

📅  最后修改于: 2023-12-03 15:01:02.253000             🧑  作者: Mango

Golang 发布请求

在 Golang 开发中,我们常常需要向某个 API 发送请求,并获取其响应。那么,如何在 Golang 中实现请求的发送呢?

Golang 标准库 - net/http

Golang 标准库中的 net/http 包提供了非常强大的 HTTP 客户端和服务器功能,支持常见的 HTTP 请求和响应方式。下面是一个简单的发送 GET 请求的示例代码:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    resp, err := http.Get("https://httpbin.org/get")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    fmt.Println(resp.StatusCode)
}

代码片段:

resp, err := http.Get("https://httpbin.org/get")
if err != nil {
    panic(err)
}
defer resp.Body.Close()

fmt.Println(resp.StatusCode)

以上代码发送了一个 GET 请求,并在控制台输出了响应的状态码。我们可以根据响应的状态码来判断请求是否成功。

如果需要发送 POST 请求,我们可以使用 http.Post 方法,示例如下:

package main

import (
    "bytes"
    "fmt"
    "net/http"
)

func main() {
    payload := []byte(`{"name": "tom", "age": 18}`)
    resp, err := http.Post("https://httpbin.org/post", "application/json", bytes.NewBuffer(payload))
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    fmt.Println(resp.StatusCode)
}

代码片段:

payload := []byte(`{"name": "tom", "age": 18}`)
resp, err := http.Post("https://httpbin.org/post", "application/json", bytes.NewBuffer(payload))
if err != nil {
    panic(err)
}
defer resp.Body.Close()

fmt.Println(resp.StatusCode)

以上代码发送了一个 Content-Type 为 application/json 的 POST 请求,并在控制台输出了响应的状态码。

Golang 第三方库 - grequests

除了标准库中提供的 HTTP 客户端,我们还可以使用第三方库 grequests 来发送请求。这个库提供了更加简洁和易用的 API,并支持异步请求和并发请求。下面是一个使用 grequests 发送 GET 请求的示例代码:

package main

import (
    "fmt"
    "github.com/levigross/grequests"
)

func main() {
    resp, err := grequests.Get("https://httpbin.org/get", nil)
    if err != nil {
        panic(err)
    }

    fmt.Println(resp.StatusCode)
}

代码片段:

resp, err := grequests.Get("https://httpbin.org/get", nil)
if err != nil {
    panic(err)
}

fmt.Println(resp.StatusCode)

以上代码同样发送了一个 GET 请求,并在控制台输出了响应的状态码。

使用 grequests 发送 POST 请求同样非常简单,示例如下:

package main

import (
    "fmt"
    "github.com/levigross/grequests"
)

func main() {
    headers := map[string]string{
        "Content-Type": "application/json",
    }
    payload := map[string]interface{}{
        "name": "tom",
        "age":  18,
    }
    resp, err := grequests.Post("https://httpbin.org/post", &grequests.RequestOptions{
        JSON:    payload,
        Headers: headers,
    })
    if err != nil {
        panic(err)
    }

    fmt.Println(resp.StatusCode)
}

代码片段:

headers := map[string]string{
    "Content-Type": "application/json",
}
payload := map[string]interface{}{
    "name": "tom",
    "age":  18,
}
resp, err := grequests.Post("https://httpbin.org/post", &grequests.RequestOptions{
    JSON:    payload,
    Headers: headers,
})
if err != nil {
    panic(err)
}

fmt.Println(resp.StatusCode)

以上代码发送了一个 Content-Type 为 application/json 的 POST 请求,并在控制台输出了响应的状态码。

总结

无论是标准库中的 net/http 还是第三方库 grequests,都提供了非常方便和易用的 API 来发送 HTTP 请求。根据实际需求选择合适的库来使用即可。