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

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

case

http包中的Request

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

go 复制代码
client :=  &http.Client{}

req, _ := http.NewRequest("POST", url, nil)
// request中有很多参数可以设置

//设置头部
req.Header.set(key,value)


//接受响应
resp,_ := client.Do(req)

http.NewRequest

go 复制代码
// 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数据格式提交

go 复制代码
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

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

go 复制代码
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

}
相关推荐
DICOM医学影像3 分钟前
4. go语言从零实现以太坊客户端 - 区块链转账
golang·区块链·以太坊·web3.0·geth
人道领域4 分钟前
【零基础学java】(等待唤醒机制,线程池补充)
java·开发语言·jvm
智算菩萨7 分钟前
【Python自然语言处理】基于NLTK库的英文文本词频统计系统实现原理及应用
开发语言·python·自然语言处理
天天进步20159 分钟前
KrillinAI 源码级深度拆解三:声音的克隆与新生——解析 KrillinAI 接入 GPT-SoVITS/CosyVoice 的配音逻辑
golang
superman超哥10 分钟前
Rust 异步并发核心:tokio::spawn 与任务派发机制深度解析
开发语言·rust·编程语言·rust异步并发核心·rust任务派发机制
喵星人工作室10 分钟前
C++传说:神明之剑0.2.1
开发语言·c++·游戏
黎雁·泠崖11 分钟前
Java入门之吃透基础语法:注释+关键字+字面量+变量全解析
java·开发语言·intellij-idea·intellij idea
Ashley_Amanda14 分钟前
Python 常见问题梳理
开发语言·windows·python
UpgradeLink17 分钟前
基于 Go 打造的升级链路管理平台:upgradelink 让设备升级更简单
开发语言·后端·golang
天府之绝19 分钟前
uniapp 中使用uview表单验证时,自定义扩展的表单,在改变时无法触发表单验证处理;
开发语言·前端·javascript·vue.js·uni-app