【Go语言】解析处理结构化响应数据
前言
之前我们已经讲了如何通过各种技术来利用TCP协议的特性创建可用的客户端和服务器。下面我们来探讨一下OSI模型的几种上层协议,那就先从HTTP开始吧!
1、基础知识
HTTP
HTTP是一种无状态协议:服务器不会维护每个请求的状态,而是通过多种方式对其进行跟踪,这些方式可能包括会话标识符、cookie、HTTP标头等。客户端和服务器有责任正确协商和验证状态。
客户端和服务器之间的通信可以同步或异步进行,但它们要以请求/响应的方式循环进行。可以在请求中添加几个选项和标头,以影响服务器的行为并创建可用的web应用程序。最常见的是服务器托管web浏览器渲染的文件,以生成数据的图形化、组织化和时尚化的表示形式。API通常使用XML、JSON或MSGRPC进行通信。某些情况下,检索到的数据可能是二进制格式,表示要下载的任意文件类型。
调用HTTP API
Go的 net/http 标准包包含多个便捷函数,可便捷地发送POST、GET和HEAD请求,函数使用形式如下:
函数Post() 具有两个附加参数 (bodyType 和 io.Reader) ,其中bodyType用于接收正文的Content-Type HTTP标头 (通常为application/x-www-form-urlencoded)
生成一个请求
我们可以使用函数NewRequest()创建结构体Request, 然后使用函数Client 的方法 Do 发送该结构体。http.NewRequest() 的函数原型如下
需要将HTTP动词和目标URL提供给函数NewRequest() 作为其前两个参数。可以选择通过传入io.Reader作为第三个参数来提供请求正文。下面进行演示
使用结构化响应解析
我们知道,只要是执行与HTTP相关的任务,就必须检查HTTP响应的各个组成部分。包括读取响应正文、访问cookie和标头或仅检查HTTP的状态代码。下面我们就使用 ioutil.ReadAll() 函数从响应正文读取数据,进行一些错误检查,并将HTTP状态代码和响应正文打印到stdout。
2、处理HTTP响应正文
将上述步骤结合起来就可以得到我们的主程序
程序运行后,结果如下:
需要注意的是:
我们在发送请求建立连接时,除了主goroutine外,还会新增两个goroutine, readLoop 和 writeLoop,而我们在Close之后会进行回收,如果不加Close的话,可能会造成goroutine泄露。
有兴趣的话可以看看这篇文章,讲的很清楚https://juejin.cn/post/6987372070120194055
3、解码一个JSON响应正文
当我们在与使用JSON进行通信的API交互,一个名为 /ping 的端点返回以下服务器状态的响应:
下面构造程序与此端点进行交互并解码JSON消息
我们先想一下流程,要解析结构化数据类型,首先要定义一个用来表示响应数据的结构体,然后把数据解码到该结构体。
总结
现在我们了解了如何构建自定义HTTP请求以及接收其响应,并且知道了如何解析结构化的数据,以便客户端可以查询信息以确定可执行的或相关联的数据。今天的内容就到这里了,如果有什么疑问欢迎在评论区一起讨论,go!go!go!
参考 : 《Black Hat Go:Go Programming for Hackers and Pentesters》
__EOF__

本文链接:https://www.cnblogs.com/Seversan-Sickle/p/17228236.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律