📅  最后修改于: 2023-12-03 15:01:02.253000             🧑  作者: Mango
在 Golang 开发中,我们常常需要向某个 API 发送请求,并获取其响应。那么,如何在 Golang 中实现请求的发送呢?
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 请求,并在控制台输出了响应的状态码。
除了标准库中提供的 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 请求。根据实际需求选择合适的库来使用即可。