给定post请求包体

{"A" : 10086,"B" : "请求信息"
}

发送HTTP过程

1. 将post请求包体(是个字符串),Marshal成json格式

2. 发送HTTP请求

3. 接收HTTP返回体

4. 解析HTTP返回体,判断返回是否正确


// HTTP: post请求参数
// {
//  "A" : 10086,
//  "B" : "请求信息"
// }
type RequestParam struct {A int    `json:"A"`B string `json:"B"`
}// HTTP返回Body
type HTTPRspBody struct {Result Results `json:"Result"`
}
type Results struct {RequestID     string   `json:"Result"`HasError      bool     `json:"HasError"`ResponseItems ErrorMsg `json:"ResponseItems"`
}
type ErrorMsg struct {ErrorMsg string `json:"ErrorMsg"`
}// 修改供应商信息
func testPostHttp() error {var (err    errorerrMsg string)// json.MarshalreqParam, err := json.Marshal(&RequestParam{})if err != nil {log.Error("Marshal RequestParam fail, err:%v", err)return err}// 准备: HTTP请求reqBody := strings.NewReader(string(reqParam))httpReq, err := http.NewRequest("POST", url, reqBody)if err != nil {log.Error("NewRequest fail, url: %s, reqBody: %s, err: %v", url, reqBody, err)return err}httpReq.Header.Add("Content-Type", "application/json")// DO: HTTP请求httpRsp, err := http.DefaultClient.Do(httpReq)if err != nil {log.Error("do http fail, url: %s, reqBody: %s, err:%v", url, reqBody, err)return err}defer httpRsp.Body.Close()// Read: HTTP结果rspBody, err := ioutil.ReadAll(httpRsp.Body)if err != nil {log.Error("ReadAll failed, url: %s, reqBody: %s, err: %v", url, reqBody, err)return err}// unmarshal: 解析HTTP返回的结果//         body: {"Result":{"RequestId":"12131","HasError":true,"ResponseItems":{"ErrorMsg":"错误信息"}}}var result HTTPRspBodyif err = json.Unmarshal(rspBody, &result); err != nil {log.Error("Unmarshal fail, err:%v", err)return err}if result.Result.HasError {log.Error("http post fail, url: %s, reqBody: %s, ErrorMsg:%s", url, reqBody, result.Result.ResponseItems.ErrorMsg)return errors.New(result.Result.ResponseItems.ErrorMsg)}log.Debug("do post http success, url: %s, reqBody: %s, body: %s %s", url, reqBody, string(rspBody), errMsg)return nil
}

golang HTTP Post请求相关推荐

  1. golang模拟post请求

    使用golang模拟post请求,首先用map封装数据,然后通过json.marshal方法转化成为[]byte类型,最后使用http.post方法 func main() {config := ma ...

  2. golang代理websocket请求

    基础: golang websocket github地址: GitHub - gorilla/websocket: A fast, well-tested and widely used WebSo ...

  3. golang post get 请求 简介

    目录 1.get请求 2.http.Post的方式 3.http.PostForm的方式 4.http.NewRequest的方式 5.http.NewRequest实例 1.普通的post get请 ...

  4. golang两种请求http的方式

    http请求在工作很常见了,下面看一下常见的2中http请求方式 if response != nil {                 defer response.Body.Close() } ...

  5. 初学Golang:web 请求的处理流程

    http.ListenAndServe()的接收请求,输出响应的流程如下: 首先调用Http.HandleFunc 按顺序做了几件事: 1 调用了DefaultServeMux的HandleFunc ...

  6. Golang——HTTP编程请求和响应实现

    请求: HTTP 请求报文由请求行.请求头部.空行.请求包体4个部分组成,如下图所示: 请求行: 请求行由方法字段.URL 字段 和HTTP 协议版本字段 3个部分组成,他们之间使用空格隔开.常用的 ...

  7. golang并发http请求几种方式

    概述 go中方便的协程写法, 让并发变得很简单, 让开发者很多时候不需要关心协程(线程)管理的问题, 不过也是有值得注意的地方. 下面以一个http请求的例子, 请求的服务是进制数据-手机号码归属地查 ...

  8. golang发送http请求

    1.使用http.Get发送get请求 package mainimport ("fmt""io/ioutil""net/http" )fu ...

  9. golang ajax jquery,golang - 从http请求返回json字符串的库/包

    没有什么它使用现有的系统封装,它相当简单的go package main import ( "encoding/json" "fmt" "net/ht ...

最新文章

  1. 软件测试职业培训中心,软件测试工程师就业班
  2. 算法设计与分析——动态规划——最大字段和问题
  3. Qt文档阅读笔记-Semaphores Example解析(信号量并发实例)
  4. IPFS是创建DWeb应用程序中基础技术的领先者
  5. 高等数学复习笔记——第八章:向量代数与空间解析几何
  6. Exploring Plain Vision Transformer Backbones for Object Detection.
  7. python3.5安装scipy_Python3上的Scipy安装
  8. 【转】关于ATSC与DVB的比较
  9. 【BZOJ3717】[PA2014]Pakowanie 状压DP
  10. 有机会向面试官提问时,你应该问这 11 个问题
  11. Android图片轮播控件
  12. Android SDK是什么?
  13. 4年前淘宝被斥“售假”,马云是这样回应的
  14. Unity批量替换文字字体自制工具
  15. mysql属于dbms还是dbs_DB、DBMS和DBS三者之间有什么关系_数据库
  16. 计算机原理理解编程语言_计算机如何理解我们对编程语言及其工作原理的高级概述...
  17. QRJDC搭建实现QQ扫码登录对接青龙对接傻妞
  18. F1-score值计算
  19. 上海交通大学 计算机 复试,上海交大电院复试回忆
  20. 求助 android开发中 如果两个控件的id相同 会怎样?如何使用findviewbyid ()寻找到?

热门文章

  1. escapeXml过滤掉特殊字符
  2. java escapexml_lt;c:outgt;标签中的escapeXml属性 - Jack Stomtion - ITeye博客
  3. 【腾讯TMQ】【测试左移专栏】手机管家PiTest测试左移实践
  4. php7使用curl扩展
  5. 一文搞懂ChatGPT相关概念和区别:GPT、大模型、AIGC、LLM、Transformer、羊驼、LangChain…..
  6. html5怎么兼容js 插件,Modernizr.js入门指南(HTML5CSS3浏览器兼容插件)
  7. unity3d笔记-击杀敌人显示不同的击杀图标
  8. iOS开发之pod升级方法
  9. JBOSS 是什么东西
  10. 奢侈品电商的高效沟通之道