当前位置: 首页 > wzjs >正文

济南网站建设找凌峰google chrome download

济南网站建设找凌峰,google chrome download,手机浏览器下载网页视频,前端网站开发一个月多少钱文章目录 Go 语言封装 HTTP 请求的 Curl 工具包🏗️ 工具包结构简介核心结构体定义初始化函数 🌟 功能实现1. 设置请求头2. 构建请求3. 发送请求4. 发送 GET 请求5. 发送 POST 请求6. 发送 PUT 请求7. 发送 DELETE 请求8. 读取响应体 💡 实现…

文章目录

  • Go 语言封装 HTTP 请求的 Curl 工具包
    • 🏗️ 工具包结构简介
      • 核心结构体定义
      • 初始化函数
    • 🌟 功能实现
      • 1. 设置请求头
      • 2. 构建请求
      • 3. 发送请求
      • 4. 发送 GET 请求
      • 5. 发送 POST 请求
      • 6. 发送 PUT 请求
      • 7. 发送 DELETE 请求
      • 8. 读取响应体
    • 💡 实现思路
    • 🚀 示例
    • 🏆 总结

Go 语言封装 HTTP 请求的 Curl 工具包

在 Go 语言开发中,与 HTTP 服务进行交互是非常常见的需求。本文将分享一个用 Go 语言封装的 Curl 工具包,它提供了简洁易用的接口来进行 HTTP 请求,包括 GETPOSTPUTDELETE 等常见操作。通过这个工具包,可以轻松管理 HTTP 请求头、查询参数和请求体,并处理响应。


🏗️ 工具包结构简介

在这个 curl 工具包中,主要定义了一个 Curl 结构体,封装了 HTTP 客户端的常见操作。

核心结构体定义

type Curl struct {client  *http.Client      // http clientbaseURL string            // base urlheaders map[string]string // headers
}
  • client:使用 http.Client 发送 HTTP 请求。
  • baseURL:基础 URL,便于在请求时自动拼接路径。
  • headers:一个存储 HTTP 请求头的 map,支持动态设置。

初始化函数

func NewCurl(baseURL string, timeout time.Duration) *Curl {return &Curl{client: &http.Client{Timeout: timeout,},baseURL: strings.TrimSuffix(baseURL, "/"),headers: make(map[string]string),}
}
  • baseURL:传入基础 URL。
  • timeout:设置超时时间。

🌟 功能实现

1. 设置请求头

SetHeader 用于设置 HTTP 请求头:

func (c *Curl) SetHeader(key, value string) {c.headers[key] = value
}

可以通过如下方式动态设置请求头:

curl.SetHeader("Content-Type", "application/json")

2. 构建请求

func (c *Curl) buildRequest(ctx context.Context, method, urlPath string, queryParams map[string]string, body io.Reader) (*http.Request, error) {// 处理完整的 URLfullURL := c.baseURL + urlPathif queryParams != nil {query := url.Values{}for key, value := range queryParams {query.Add(key, value)}fullURL += "?" + query.Encode()}// 创建请求req, err := http.NewRequestWithContext(ctx, method, fullURL, body)if err != nil {return nil, err}// 设置请求头for key, value := range c.headers {req.Header.Set(key, value)}return req, nil
}

3. 发送请求

func (c *Curl) doRequest(req *http.Request) (*http.Response, error) {resp, err := c.client.Do(req)if err != nil {return nil, err}return resp, nil
}

4. 发送 GET 请求

Get 方法通过 HTTP GET 请求获取资源:

func (c *Curl) Get(ctx context.Context, urlPath string, queryParams map[string]string) (*http.Response, error) {req, err := c.buildRequest(ctx, http.MethodGet, urlPath, queryParams, nil)if err != nil {return nil, err}return c.doRequest(req)
}

示例:

response, err := curl.Get(context.TODO(), "/user", map[string]string{"id": "123"})

5. 发送 POST 请求

Post 方法通过 HTTP POST 请求提交数据:

func (c *Curl) Post(ctx context.Context, urlPath string, body []byte) (*http.Response, error) {req, err := c.buildRequest(ctx, http.MethodPost, urlPath, nil, bytes.NewBuffer(body))if err != nil {return nil, err}return c.doRequest(req)
}

示例:

data := []byte(`{"name":"Alice"}`)
response, err := curl.Post(context.TODO(), "/user", data)

6. 发送 PUT 请求

Put 方法通过 HTTP PUT 请求更新资源:

func (c *Curl) Put(ctx context.Context, urlPath string, body []byte) (*http.Response, error) {req, err := c.buildRequest(ctx, http.MethodPut, urlPath, nil, bytes.NewBuffer(body))if err != nil {return nil, err}return c.doRequest(req)
}

示例:

data := []byte(`{"age":30}`)
response, err := curl.Put(context.TODO(), "/user", data)

7. 发送 DELETE 请求

Delete 方法通过 HTTP DELETE 请求删除资源:

func (c *Curl) Delete(ctx context.Context, urlPath string) (*http.Response, error) {req, err := c.buildRequest(ctx, http.MethodDelete, urlPath, nil, nil)if err != nil {return nil, err}return c.doRequest(req)
}

示例:

response, err := curl.Delete(context.TODO(), "/user")

8. 读取响应体

ReadResponseBody 读取 HTTP 响应体并返回字节数组:

func ReadResponseBody(resp *http.Response) ([]byte, error) {defer func(Body io.ReadCloser) {err := Body.Close()if err != nil {fmt.Printf("close response body failed: %v\n", err)}}(resp.Body)return io.ReadAll(resp.Body)
}

示例:

body, err := ReadResponseBody(response)
if err != nil {fmt.Println("Read response body error:", err)
} else {fmt.Println("Response body:", string(body))
}

💡 实现思路

  1. 使用 http.NewRequestWithContext 构建 HTTP 请求对象。
  2. 通过 client.Do(req) 发送请求。
  3. 动态设置请求头,支持不同的 Content-Type。
  4. 处理查询参数,方便 GET 请求传参。
  5. 读取响应体,处理服务器返回的数据。

🚀 示例

完整示例:

curl := NewCurl("https://example.com", 10*time.Second)
curl.SetHeader("Authorization", "Bearer token")
resp, err := curl.Get(context.TODO(), "/api/resource", map[string]string{"key": "value"})
if err != nil {log.Fatalf("Failed to send GET request: %v", err)
}body, err := ReadResponseBody(resp)
if err != nil {log.Fatalf("Failed to read response: %v", err)
}fmt.Println("Response:", string(body))

🏆 总结

通过封装 Curl 结构体,简化了 Go 语言中与 HTTP 服务的交互过程,提供了灵活的配置和扩展能力。通过这种封装,可以快速集成 HTTP 请求,减少模板代码的编写,提升开发效率。

http://www.dtcms.com/wzjs/532613.html

相关文章:

  • 怎么做黑客把网站余额更改排超联赛积分榜
  • 南宁企业如何建网站友情链接互换网站
  • 企业建设网站的帮助google关键词指数
  • 泰安口碑好的企业建站公司近两年成功的网络营销案例及分析
  • 怎么做盗文网站中国大数据平台官网
  • 临沂建设大型网站建设怎么注册个人网站
  • 制作网页页面唐山seo排名外包
  • 自己做开箱网站北京seo结算
  • 商务网站推广技巧包括什么搜索引擎营销方案例子
  • 淘宝站外网站可以做吗广州seo服务公司
  • 大鹏新区住房建设局网站百度推广开户代理
  • 本溪做网站 淘宝店北京seo顾问外包
  • 网站建设方式网站软文推广范文
  • 芜湖经济开发区网站网盘搜索神器
  • 高端人才做兼职的招聘网站有哪些最近的时事新闻
  • yellow片观看完整版搜狗网站seo
  • 网站 建设 汇报百度官网地址
  • 怎么看一个网站是什么时候做的焊工培训
  • iis 如何搭建网站电商网站设计模板
  • 自己做网站和外包舆情信息怎么写
  • 合肥网站建设是什么百度深圳总部
  • 佛山微网站开发哪家好青岛seo整站优化招商电话
  • 网站制作哪个公司好教育培训网站模板
  • 先做产品网站还是app舆情监控系统
  • 外贸网站平台seo推广推广引流方法有哪些?
  • 兄弟们有没有没封的网站查数据的网站有哪些
  • 网站建设合同编号百度是国企还是央企
  • 做网站的开发环境微信搜一搜排名优化
  • 网上做任务的网站有哪些内容seo是什么地方
  • ssm做网站网络平台推广广告费用