好的,以下是一个 golang 封装的公用 http 请求示例:
package http
import (
"bytes"
"io/ioutil"
"net/http"
)
type Request struct {
URL string // 请求的url
Method string // 请求方式
Headers map[string]string // 请求头
}
// 发送 HTTP 请求并返回响应体和错误(如果有)
func (r *Request) Send() ([]byte, error) {
client := &http.Client{}
// 创建一个请求对象
req, err := http.NewRequest(r.Method, r.URL, nil)
if err != nil {
return nil, err
}
// 设置请求头部信息
for key, value := range r.Headers {
req.Header.Set(key, value)
}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
// 读取响应体信息
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return bodyBytes, nil
}
使用该封装后,我们可以这样发送一个 GET 请求:
req := &http.Request{
URL: "https://api.example.com/get",
Method: "GET",
Headers: map[string]string{"Content-Type": "application/json"},
}
respBodyBytes, err := req.Send()
if err != nil {
fmt.Println("Error:",err.Error())
} else {
fmt.Println(string(respBodyBytes))
}
同理,我们也可以通过修改 Method、URL 和 Headers 属性来构造 POST 或其它类型的请求。