golang POST data 解析

【Golang 接口自动化02】使用标准库net/http发送Post请求 上一篇我们介绍了使用net/http发送get请求,因为考虑到篇幅问题,把Post单独拎了出来,我们在这一篇一起从源码来了解一下Golang的Post请求。Json、xml请求请求、响应数据简析interface概念复习。 阅读详情

1. 问题背景

最近开始上手Golang,了解了一下web request相关的东西。golang web使用的包是net/http, 在其基础上封装了一层 httprouter,这个框架被广泛应用,在httprouter之上又封装一层成为gin框架,gin是一个高性能框架,使用起来非常简单。只需从context中解析就可以,被应用在大型高性能项目上。如果学习,还是从底层开始。

httprouter的资料有很多,大部分都重点介绍GET 及相应的参数解析,形如:

router.GET("/tasks/:user_key", TaskList)

对于这种类型的参数解析,只需要从router 的 param中获取参数即可,即下面的第三个参数

func TaskList(w http.ResponseWriter, r *http.Request, params httprouter.Params)

对于POST请求,这种传参形式非常受限,大部分情况下post的数据都是通过json 或者 form等格式进行传递的。网上这方面的内容貌似相对比较少,下面是我整理的POST参数解析方式。

1. 解析FORM数据

资料显示,Golang的httprouter很好的封装了form数据的请求,因此对于form格式的数据只需使用form就能够得到。前提是需要先parseform 再get值。即先r .ParseForm()  再Get key: val := r.Form.Get("user") 即可。

func SaveTasks(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
	r.ParseForm()
	val := r.Form.Get("user")
	log.Println("val: ", val)
	fmt.Fprintf(w, "Get request ", val)
}

在Postman中发送数据的时候选择的是: x-www-form-urlencoded

2. 解析Json数据

对于json数据,暂时没有看到httprouter中封装的好的方法。因此只能从body中读取。这样就是通过header中的信息 + body中的信息共同解析出传送的数据。

func Tasklist(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
	log.Printf("Get %s request. host: %s  params: %s\n", r.Method, r.Host)
	len := r.ContentLength
	rtype := r.Header.Get("Content-Type")
	content := make([]byte, len)
	r.Body.Read(content)
	fmt.Println("request-type: ", rtype)
	fmt.Println("request-lenght: ", len)
	fmt.Println("request-content: ", string(content))
	fmt.Fprintf(w, "content type: %s, get request:%s", rtype, string(content))

}

通过这种方法,可以获取POST传过来的任何形式的数据。不管是form数据还是json数据

 

《go web 编程》中chitchat项目详解(有详细中文注释) ChitChat ChitChat的数据模型: 1. User——表示论坛的用户信息 2. Session——表示论坛用户当前的登录会话 3. Thread——表示论坛里面的帖子,每一个帖子都记录了多个论坛用户之间的对话 4. Post——表示用户在帖子里面添加的回复:w 注意 如果直接go run 或者 go build 程序会有问题,要修改代码中import有关data包的路... 阅读详情

相关推荐

【蓝牙专题】HCI协议解析

一、概念: 很多人接触蓝牙,是从HCI开始,因为HCI是主机控制接口协议(Host Controller Interface),蓝牙命令通过HCI来发送到Controller; 1、架构 如下图,HCI通过物理接口(USB、UART等)或虚拟接口,传递数据到Controller,Controller也通过同样的接口发送接收数据,这里注意到HCI层是在L2CAP层之下,LMP层之上; HCI

蚂蚁的专栏 5068

golang几种post请求方式

get请求 get请求可以直接http.Get方法,非常简单。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func httpGet() {     resp, err := http.Get("http://www.01happy.com/demo/accept.php?id=1")     if er...

weixin_34008933的博客 852

Aruba无线控制器实战:如何用Client Match优化企业办公区漫游(附SNR调优技巧)

本文深入解析了如何利用Aruba无线控制器的Client Match功能优化企业办公区无线漫游体验。通过实战配置,详细阐述了基于SNR(信噪比)的精细化调优策略,包括阈值设定、负载均衡与场景化参数调整,旨在解决终端粘滞、乒乓漫游等问题,实现智能、平滑的无缝漫游。

weixin_28318011的博客 224

Golang发送Get和Post请求

Golang发送Get请求和Post请求

sunriseYJP的博客 4737

PHP证书图片生成

$realname = "姓名"; $schoolname = "学校"; $idcard = "身份证号"; $image = imagecreatefrompng('certification.png'); // 证书模版图片文件的路径 $red = imagecolorallocate($image,00,00,00); // 字体颜色

4034

powerdesigner导出sql将name放到comment注释上

【代码】powerdesigner导出sql将name放到comment注释上。

weixin_45947759的博客 1351

Golang: HTTP之Post请求

给定post请求包体(是json的字符串) { "A" : 10086, "B" : "请求信息" } 发送HTTP过程 1. 将post请求包体(是个json格式的字符串),Marshal成json格式 2. 发送HTTP请求 3. 接收HTTP返回体 4. 解析HTTP返回体,判断返回是否正确 // HTTP: post请求参数 // { // "A" : 10086, // "B" : "请求信息" // } type RequestParam struc

JaweG 5431

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月14日-Clamshell 拆卸与安装

Clamshell 拆卸与安装。

weixin_46735260的博客 1681

golang发起GET和POST请求,超时设置,设置代理

GET请求 func CurlGetWithParam(link string, param map[string]interface{}) (response string, err error) { u, _ := url.Parse(link) q := u.Query() for k, v := range param { var val string switch ins := v.(type) { case string: val = ins case int:

猛犸象 9803

DMTF相关协议(一):Redfish和SMBIOS

Redfish 是一种管理标准,使用超媒体 RESTful 接口中的数据模型表示。该模型以标准的、机器可读的模式表示,消息的有效负载以 JSON 表示。该协议本身利用了 OData v4。由于它是一个超媒体 API,因此能够通过一致的接口表示各种实现。它具有管理数据中心资源、处理事件、长时间任务和发现的机制。

weixin_44032634的博客 2263

验证 helm Chart 的正确性

验证 helm Chart 的正确性

小橙子的笔记屋 281

Golang Post 表单使用(上)

package main import ( "fmt" "net/http" ) func query(w http.ResponseWriter, r *http.Request) { url := r.URL query := url.Query() id := query["id"] fmt.Fprintln(w, id) name := query.Get("name") fmt.Fprintln(w, name) } func main() { http.HandleFu

qq_41826939的博客 1166

STM32 之十三 看门狗(WDG)及低功耗下的处理

  最近在做低功耗项目时,遇到了看门狗不好处理的问题。在 ST 的各系列 MCU 中,看门狗应该算是使用配置起来最简单的一个外设了。我们通常仅需要配置很少的配置项,但是,一旦要配合低功耗模式则配置就比较麻烦了。MCU 中有两只狗,一只叫 Independent watchdog (IWDG);另一只叫 System window watchdog (WWDG)。下面是这两只狗的简单介绍! IWDG   IWDG 基本就等同于我们独立使用的看门狗芯片。最适合那些要求看门狗作为一个完全独立的进程在主应用程序之外

技术干货 7850

HTTP POST提交数据方式不同引起的躺坑记

POST提交数据不同方式、导致的前后端解析POST数据失败 1. application/x-www-form-urlencoded 2. multipart/form-data

Jason技术笔记 1835

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Go与HTML表单

POST和GET请求都可以传递表单,但一般由POST请求传递表单。以GET方法传递表单时,表单数据以键值的形式包含在请求的URL里。服务器在接收到浏览器发送的数据表单之后 ,还需要对这些数据进行语法分析,从而提取数据中的记录的键值对。 HTML表单的内容类型(content type)决定了POST请求在发送键值对将使用何种格式,HTML表单的内容类型是由表单的enctype属性指定的: ...

磨镜台的博客 2209

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

go实现Http Server文件服务器,提供上传、下载功能

server.go package main import ( "fmt" "github.com/prometheus/common/log" "io" "net/http" "os" "strings" ) func upload(w http.ResponseWriter, req *http.Request) { contentType := req.Header.Get...

xmcy001122的专栏 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

golang服务端解析客户端发来的post数据

golang服务端解析客户端发来的post数据

FlayHigherGT的博客 1834

Go语言使用net/http实现简单登录验证和文件上传功能

Go语言使用net/http实现简单登录验证和文件上传功能

hsy12342611的专栏 2870

centos http文件上传服务器 推荐_从 HTTP 角度看 Go 如何实现文件上传

早前写过一篇文章,Go HTTP 请求 QuickStart。当时,主要参考 Python 的 requests 大纲介绍 Go 的 net/http 如何发起 HTTP 请求。最近,尝试录成它的视频,访问地址。发现当时虽然写得比较详细,但也只是介绍用法,可能不知其所以然。比如文件上传那部分,如果不了解 http 文件上传协议 RFC 1867,就很难搞懂为什么代码这么写。今天,就以这个话题为基础...

weixin_40001372的博客 102

编写GO的WEB开发框架 (五): 请求参数封装

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34281537的博客 232

PHP 通过curl post数据到 golang 的webserver

html原生提交数据: name: pass: PHP客户端模拟提交数据代码: 要提交的数据: $data = array ("name" => "bob","pass" => "12345"); function post_data($requestUri,$data) { $uri = $this->romot

ribavnu的专栏 1664

go,net/http库Request结构详细解析

Request是HTTP访问的请求对象,非常重要的一部分,正确的解析请求数据才能给客户端返回响应。 通过标准库了解到该结构的详细组成,通过简单示例验证一下。 下方是go服务端代码,解析Request各成员,或者说是属性。 // sayhello project sayhello.go package main import ( "fmt" "log" "net/http" "st...

zhangyangziwo的专栏 4339

BBDown B站视频下载器指南:10 分钟从安装到批量下载

BBDown 是一款免费的 B站视频下载器,用一条命令就能下载 B站普通视频、番剧和整个收藏夹,适合想把 B站内容存到本地备份、又不想开浏览器的人。本文带你 10 分钟从安装走到批量下载。 ## 🚀 60 秒装好:第一条下载命令跑通 前提只有一个:系统里装着 .NET 运行时(仓库当前按 .NET 9 构建,版本越新越好)。然后一条命令装完: ```bash dotnet tool ins

gitblog_00929的博客 249

GoWeb获取请求

go处理web请求的方法汇总,分析,比较

weixin_46120107的博客 636

GoWeb——处理请求(Request)

例如,可以自定义一个处理器方法noAuth(),并通过w.WriteHeader()方法返回一个401未认证状态码(注意,在运行时,w代表的是对应的response对象实例,而不是接口)。因此在请求头中支持的方法这里都支持,比如可以通过w.Header().Add()方法新增响应头。例如,如果要设置一个301重定向响应,则只需要通过w.WriteHeader()方法将响应状态码设置为301,再通过w.Header().Set()方法将“Location”设置为一个可访问域名即可。

吴声子夜歌的博客 754

go语言接收html传值,【记录】go语言中实现http的POST且传递对应的post data

【背景】折腾:期间,需要去发送POST操作,去模拟登陆百度,且post时要传递对应的post数据。【折腾过程】1.自己参考官网:去看看,POST的参数和NewRequest的参数。2.期间想要实现go中的函数的可选参数,默认参数,结果不支持:3.后来看了半天,很多帖子,貌似都是那个Form或PostForm的,但是感觉不太对。4.参考:看到是http.NewRequest设置为POST时,还传递了...

weixin_42389113的博客 796
上一篇: C++ 多线程 生产者消费者(1)
下一篇: nginx location 详解
令羽飞飞
博客等级 码龄14年 42粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值