ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Curl- go的自带包 net/http实现

2026/8/15 8:37:05 拓冰建站 浏览量
Curl- go的自带包 net/http实现

Curl- go的自带包 net/http实现

case

http包中的Request

发送请求的步骤:1. 创建客户端 2. 发送请求 3. 接受响应

client :=  &http.Client{}req, _ := http.NewRequest("POST", url, nil)
// request中有很多参数可以设置//设置头部
req.Header.set(key,value)//接受响应
resp,_ := client.Do(req)

http.NewRequest

// NewRequest wraps NewRequestWithContext using context.Background.
func NewRequest(method, url string, body io.Reader) (*Request, error) {return NewRequestWithContext(context.Background(), method, url, body)
}
  • method
    • get,post,delete,put
  • url
  • body :可以是多种形式的数据包含在请求体中

我们可以看出这个 : body是一个io.Reader 所以Request的请求体就是字节流。所以制定编码方式-》用header指定

multipart/form-data 表单方式提交,上传文件

application/x-www-form-urlencoded url编码方式提交

application/json json数据格式提交

req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

接下来就可以往body里放字节流数据

import uri "net/url"
fromData := uri.Values{}for k, v := range data {fromData.Set(k, v)}
req, _ := http.NewRequest("POST", url, strings.NewReader(fromData.Encode()))

Post Get Delete Put

都可以根据这个模版魔改

client :=  &http.Client{}req, _ := http.NewRequest("POST", url, nil)
// request中有很多参数可以设置//设置头部
req.Header.set(key,value)//接受响应
resp,_ := client.Do(req)

例如:from-data的post:

func PostWithFromData(url string, headers map[string]string, data map[string]string) []byte {jar, _ := cookiejar.New(nil)  // 客户端带cookie,这里没用到client := &http.Client{Jar: jar,}fromData := uri.Values{}for k, v := range data {fromData.Set(k, v)}req, _ := http.NewRequest("POST", url, strings.NewReader(fromData.Encode()))for key, value := range headers {req.Header.Set(key, value)}req.Header.Set("Content-Type", "application/x-www-form-urlencoded")resp, err := client.Do(req)if err != nil {fmt.Println("发送请求失败:", err)return nil}defer resp.Body.Close()body, _ := io.ReadAll(resp.Body)return body}