golang web开发获取get、post、cookie参数
在成熟的语言java、python、php要获取这些参数应该来讲都非常简单,过较新的语言golang用获取这些个参数还是费了不少劲,特此记录一下。
golang版本:1.3.1
在贴代码之前如果能先理解一下golang http.request的三个属性Form、PostForm、MultipartForm应该能较好的理解代码,下面摘录一下。
Form、PostForm、MultipartForm说明
简要说明一下
Form:存储了post、put和get参数,在使用之前需要调用ParseForm方法。 PostForm:存储了post、put参数,在使用之前需要调用ParseForm方法。 MultipartForm:存储了包含了文件上传的表单的post参数,在使用前需要调用ParseMultipartForm方法。
获取GET参数
网上比较常见的一个版本是:
r.ParseForm() if len(r.Form["id"]) > 0 { fmt.Fprintln(w, r.Form["id"][0]) }
其中r表示*http.Request类型,w表示http.ResponseWriter类型。
r.Form是url.Values字典类型,r.Form["id"]取到的是一个数组类型。因为http.request在解析参数的时候会将同名的参数都放进同一个数组里,所以这里要用[0]获取到第一个。
这种取法在通常情况下都没有问题,但是如果是如下请求则无法取到需要的值:
<form action="http://localhost:9090/?id=1" method="POST"> <input type="text" name="id" value="2" /> <input type="submit" value="submit" /> </form>
因为r.Form包含了get和post参数,并且以post参数为先,上例post参数和get参数都有id,所以应当会取到post参数2。虽然这种情况并不多见,但是从严谨的角度来看程序上还是应当处理这种情况。立马补上改进代码:
queryForm, err := url.ParseQuery(r.URL.RawQuery) if err == nil && len(queryForm["id"]) > 0 { fmt.Fprintln(w, queryForm["id"][0]) }
代码比较简单,就是分析url问号后的参数。事实上这个也是标准库ParseForm中关于get参数解析代码。
获取POST参数
这里要分两种情况:
普通的post表单请求,Content-Type=application/x-www-form-urlencoded 有文件上传的表单,Content-Type=multipart/form-data
第一种情况比较简单,直接用PostFormValue就可以取到了。
fmt.Fprintln(w, r.PostFormValue("id"))
第二种情况复杂一些,如下表单:
<form action="http://localhost:9090" method="POST" enctype="multipart/form-data"> <input type="text" name="id" value="2" /> <input type="file" name="pic" /> <input type="submit" value="submit" /> </form>
因为需要上传文件,所以表单enctype要设置成multipart/form-data。此时无法通过PostFormValue来获取id的值,因为golang库里还未实现这个方法:
幸好golang中可以提供了另外一个属性MultipartForm来处理这种情况。
r.ParseMultipartForm(32 << 20) if r.MultipartForm != nil { values := r.MultipartForm.Value["id"] if len(values) > 0 { fmt.Fprintln(w, values[0]) } }
获取COOKIE参数
cookie, err := r.Cookie("id") if err == nil { fmt.Fprintln(w, "Domain:", cookie.Domain) fmt.Fprintln(w, "Expires:", cookie.Expires) fmt.Fprintln(w, "Name:", cookie.Name) fmt.Fprintln(w, "Value:", cookie.Value) }
r.Cookie返回*http.Cookie类型,可以获取到domain、过期时间、值等数据。
小结
在折腾的过程中看了下net/http包中的源码,感觉在web开发中还是有很多不完善的地方。作为使用者来讲,最希望就是直接通过一个方法取到相应的值就可以了,期待官方团队尽早完善。
转载请注明:快乐编程 » golang web开发获取get、post、cookie参数
相关推荐
Golang: 接收GET和POST参数 GET 和 POST 是我们最常用的两种请求方式,今天讲一讲如何在 golang 服务中,正确接收这两种请求的参数信息。 处理GET请求 1.1 接收GET请求 //接收GET请求 func Get(writer ...
golang_Web开发(1).pdf
Golang的web开发入门书籍,写的挺好的,排版佳。可读性强
利用go语言开发web应用的示例。详细说明见我的博客: http://blog.csdn.net/yavobo/article/details/9380011
利用go语言开发web应用的示例。相关说明见我的博客: http://blog.csdn.net/yavobo/article/details/9380011
go语言web开发技术指南。适合想学习golang并进行网络开发的同学。
golang的web框架beego https://github.com/astaxie/beego
go语言学习的相关资源,有pdf格式和kindle专用格式mobi,资料包含:go语言程序设计、学习Go语言(Golang)、Go语言圣经、Go语言实战、golang Web开发
golang web编程 图书英文版 学习golang还是要会看英文文档的~~
这是一个Golang 获取wmi windows硬件信息的源代码,包括CPU,网卡,内存,硬盘等信息
这是一份中文的文档,对于学习go语言的朋友来说是不错的选择。
基于golang语言开发一个个人博客项目
ftp+web用户管理界面 安装博客地址:https://blog.csdn.net/zhanremo3062/article/details/123083547?spm=1001.2014.3001.5502 创作不易,感谢大家以来的支持!
集成各种获取方式,获取正确的IP
Golang开发培训知识图谱
在golang web开发领域是一个非常热门的web框架。 启动一个Gin web服务器 使用下面的命令安装Gin go get -u github.com/gin-gonic/gin 在代码里添加依赖 import github.com/gin-gonic/gin 快速启动一个Gin服务器的...
本文实例讲述了Go语言服务器开发实现最简单HTTP的GET与POST接口。分享给大家供大家参考。具体分析如下: Go语言提供了http包,可以很轻松的开发http接口。以下为示例代码: 代码如下:package webserver import...
golang编程入门神器,从入门到精通,理论和实际demo相结合,帮你快速入门golang开发
本程序提供可对接开发的license授权。 本授权工具包括: 1.license校验程序(.dll/.so形式对接到产品中); 2.license生成客户端(GUI/shell方式); 3.客户计算机机器码生成程序(shell); 4.license文件最外层...
google发布的GO语言,本教材在于说明怎么用GO语言开发web应用,有基础,有应用,很值得分享学习