在Golang开发中,使用标准库net/http就可以很方便地实现HTTP客户端,完成GET和POST请求的发送。下面直接通过示例说明具体做法。

使用net/http发送GET请求
GET请求通常用于获取资源。可以调用http.Get函数快速发起请求,也可以使用http.NewRequest获得更灵活的控制。
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
// 简单发起GET请求
resp, err := http.Get("https://ipipp.com/api/info")
if err != nil {
fmt.Println("请求失败:", err)
return
}
defer resp.Body.Close()
// 读取响应内容
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取失败:", err)
return
}
fmt.Println("状态码:", resp.StatusCode)
fmt.Println("响应内容:", string(body))
}
使用NewRequest发送带参数的GET请求
如果需要添加查询参数或自定义请求头,建议使用http.NewRequest构造请求。
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
// 创建GET请求
req, err := http.NewRequest("GET", "https://ipipp.com/api/search", nil)
if err != nil {
fmt.Println(err)
return
}
// 设置查询参数
q := req.URL.Query()
q.Set("keyword", "golang")
req.URL.RawQuery = q.Encode()
// 设置请求头
req.Header.Set("User-Agent", "MyClient")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
发送POST请求
POST请求常用于提交数据。下面演示以表单形式和JSON形式发送POST请求。
表单形式POST
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
// 表单数据
form := url.Values{}
form.Set("name", "张三")
form.Set("age", "20")
resp, err := http.PostForm("https://ipipp.com/api/user", form)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
JSON形式POST
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
// 准备JSON数据
data := map[string]interface{}{
"username": "test",
"password": "123456",
}
jsonData, _ := json.Marshal(data)
// 发送JSON POST请求
resp, err := http.Post("https://ipipp.com/api/login", "application/json", bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
设置客户端超时
实际项目中必须为HTTP客户端设置超时,避免请求长时间阻塞。可通过http.Client的Timeout字段配置。
package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
client := &http.Client{
Timeout: 5 * time.Second,
}
resp, err := client.Get("https://ipipp.com/api/info")
if err != nil {
fmt.Println("请求出错:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
小结
使用Golang实现HTTP客户端请求并不复杂,标准库net/http已提供完整能力。对于简单调用可使用http.Get和http.PostForm,需要定制时使用http.NewRequest配合http.Client。注意设置超时和处理错误,就能在项目中稳定地完成接口请求。
GolangHTTP客户端GET_POST请求修改时间:2026-07-28 19:27:31