• 一、参考
    • 1、Get请求封装
    • 2、Post请求封装
  • 二、按需调整
    • 1、GET请求
    • 2、POST请求
  • 三、其他
  • 四、json.Marshal()方法 特殊字符&被转义

一、参考

  • 参考地址:go对get、post请求封装

1、Get请求封装

//Get http get method
func Get(url string, params map[string]string, headers map[string]string) (*http.Response, error) {//new requestreq, err := http.NewRequest("GET", url, nil)if err != nil {log.Println(err)return nil, errors.New("new request is fail ")}//add paramsq := req.URL.Query()if params != nil {for key, val := range params {q.Add(key, val)}req.URL.RawQuery = q.Encode()}//add headersif headers != nil {for key, val := range headers {req.Header.Add(key, val)}}//http clientclient := &http.Client{}log.Printf("Go GET URL : %s \n", req.URL.String())return client.Do(req)
}

2、Post请求封装

//Post http post method
func Post(url string, body map[string]string, params map[string]string, headers map[string]string) (*http.Response, error) {//add post bodyvar bodyJson []bytevar req *http.Requestif body != nil {var err errorbodyJson, err = json.Marshal(body)if err != nil {log.Println(err)return nil, errors.New("http post body to json failed")}}req, err := http.NewRequest("POST", url, bytes.NewBuffer(bodyJson))if err != nil {log.Println(err)return nil, errors.New("new request is fail: %v \n")}req.Header.Set("Content-type", "application/json")//add paramsq := req.URL.Query()if params != nil {for key, val := range params {q.Add(key, val)}req.URL.RawQuery = q.Encode()}//add headersif headers != nil {for key, val := range headers {req.Header.Add(key, val)}}//http clientclient := &http.Client{}log.Printf("Go POST URL : %s \n", req.URL.String())return client.Do(req)
}

二、按需调整

  • 我不需要所有的 response 内容,我只要返回的 res.Body 数据

1、GET请求

//Get http get method
func Get(url string, params map[string]string, headers map[string]string) ([]byte, error) {//new requestreq, err := http.NewRequest("GET", url, nil)if err != nil {log.Println(err)return nil, errors.New("new request is fail ")}//add paramsq := req.URL.Query()if params != nil {for key, val := range params {q.Add(key, val)}req.URL.RawQuery = q.Encode()}//add headersif headers != nil {for key, val := range headers {req.Header.Add(key, val)}}//http clientclient := &http.Client{}log.Printf("Go GET URL : %s \n", req.URL.String())//发送请求res, err := client.Do(req)if err != nil {return nil, err}defer res.Body.Close() //一定要关闭res.Body//读取bodyresBody, err := ioutil.ReadAll(res.Body) //把  body 内容读入字符串 sif err != nil {return nil, err}return resBody, nil
}

2、POST请求

//Post http post method
func Post(url string, body map[string]interface{}, params map[string]string, headers map[string]string) ([]byte, error) {//add post bodyvar bodyJson []bytevar req *http.Requestif body != nil {var err errorbodyJson, err = json.Marshal(body)if err != nil {log.Println(err)return nil, errors.New("http post body to json failed")}}req, err := http.NewRequest("POST", url, bytes.NewBuffer(bodyJson))if err != nil {log.Println(err)return nil, errors.New("new request is fail: %v \n")}req.Header.Set("Content-type", "application/json")//add paramsq := req.URL.Query()if params != nil {for key, val := range params {q.Add(key, val)}req.URL.RawQuery = q.Encode()}//add headersif headers != nil {for key, val := range headers {req.Header.Add(key, val)}}//http clientclient := &http.Client{}log.Printf("Go POST URL : %s \n", req.URL.String())//发送请求res, err := client.Do(req)if err != nil {return nil, err}defer res.Body.Close() //一定要关闭res.Body//读取bodyresBody, err := ioutil.ReadAll(res.Body) //把  body 内容读入字符串 sif err != nil {return nil, err}return resBody, nil
}

三、其他

  • 因为还在学习之中,如果内容有误,请宽容指出,不胜感激~

四、json.Marshal()方法 特殊字符&被转义

  • 如果希望json.Marshal() 特殊字符&不被转义为\u0026:请参考 golang 微信小程序获取二维码scene参数报错 invalid scene rid: f05f96ab-5382f139-14b13d2f

go对get、post请求封装相关推荐

  1. 小程序仿 axios 请求封装

    一.新建request.js /** 功能:小程序仿 axios 的请求封装*/ export default class Request {// 配置项configure = {baseURL: ' ...

  2. uni-app 请求封装

    uni-app 请求封装 请求封装 // 默认配置 const instanceConfig = {baseURL: '',header: {'content-type': 'application/ ...

  3. ios 请求失败封装_vue_axios请求封装、异常拦截统一处理

    1.前端网络请求封装.异常统一处理 vue中采用axios处理网络请求,避免请求接口重复代码,以及各种网络情况造成的异常情况的判断,采用axios请求封装和异常拦截操作: axios 请求封装 // ...

  4. vue请求封装,http-接口部分(文档笔记)

    http-接口 目录结构 . ├── src 源码目录 │ ├── http 请求封装 │ │ ├── modules 请求所属模块 │ │ │ ├── example.js example模块请求 ...

  5. vue_axios请求封装、异常拦截统一处理

    1.前端网络请求封装.异常统一处理 vue中采用axios处理网络请求,避免请求接口重复代码,以及各种网络情况造成的异常情况的判断,采用axios请求封装和异常拦截操作: axios 请求封装 // ...

  6. Python接口自动化之requests请求封装

    ------·今天距2021年253天·------ 这是ITester软件测试小栈第114次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之Token详解及应用,介绍tok ...

  7. Spring Boot + Vue 前后端分离开发,前端网络请求封装与配置

    前端网络访问,主流方案就是 Ajax,Vue 也不例外,在 Vue2.0 之前,网络访问较多的采用 vue-resources,Vue2.0 之后,官方不再建议使用 vue-resources ,这个 ...

  8. 【 微信小程序请求封装】【进阶版】处理401请求token过期--重新登录--重新发起刚才过期的请求

    微信小程序请求封装(拦截器):处理请求过期–重新登录–重新发起刚才过期的请求 env.js //这里使用的接口呢都是自己模拟的,可以根据自己的需求进行添加module.exports={//开发环境的 ...

  9. 微信小程序登录及请求封装

    整合了获取用户信息/用户手机号/及请求封装 粘贴即用 目录结构 app.js //app.js // const util = require('/utils/util.js') // import ...

  10. PHP Request请求封装

    /*** Request请求封装* Class Request* @package tool*/ class Request {// curl 请求错误码protected static $list_ ...

最新文章

  1. 《Hibernate 系列》- 入门例子
  2. 糟糕程序员的20个坏习惯
  3. 处理 read_csv 报错 OSError:Initializing from file failed
  4. 如何在Marketing Cloud的弹出UI窗口里添加扩展字段
  5. 标记偏见_分析师的偏见
  6. 如何使用Ionic和Firebase在短短三天内创建冠状病毒跟踪器应用程序
  7. python和c语言混合编程-python和C语言混编的几种方式
  8. linux canopen软件,CANopen学习笔记
  9. 叔丁基氢醌(TBHQ)行业调研报告 - 市场现状分析与发展前景预测
  10. linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
  11. 开关电流双线性映射无损积分器的电路结构和z变换函数
  12. 计算机考研复试——数据库篇
  13. 关于 Unicode 每个程序员应该知道的 5 件事
  14. VSLAM学习记录-求导:李群与李代数
  15. 如何准备面试?“-80,阿里Java开发面试解答
  16. linux企业级应用实战运维和调优资源,Linux企业级应用实战、运维和调优
  17. 个人如何做一个能赚钱的网站?
  18. 科学理论和计算机技术的发展史,探究计算机科学与技术的发展趋势
  19. 使用H5 canvas画一个坦克
  20. 当事情推动不了时,投诉或许是一种好的解决方案 | 每天成就更大成功

热门文章

  1. A - 加农炮(线段树)单点更新
  2. 用python建云盘_超简单!基于Python搭建个人“云盘”
  3. hive get_json_object json_tuple json解析详解
  4. MySql explain命令详解
  5. ironpython使用dictionary_Ironpython引用C#数据结构
  6. 图标和文字跟着div比例放大缩小_【方法技巧】高考地理越来越重视基本概念的考查,看高中地理如何考查比例尺的判读和应用,附专项练习...
  7. wxpython wx listctrl_wxPython实现指定单元格可编辑的ListCtrl | 学步园
  8. java中将date插入mysql中date_Java代码中Date类型插入到mysql数据库中数值不一致
  9. mac 启用root用户
  10. tp3.2 访问地址url大小写及控制器多个单词组成时url