golang post取参数的一些问题
2016-07-21 10:52
309 查看
在成熟的语言java、python、php要获取这些参数应该来讲都非常简单,过较新的语言golang用获取这些个参数还是费了不少劲,特此记录一下。
在贴代码之前如果能先理解一下golang http.request的三个属性Form、PostForm、MultipartForm应该能较好的理解代码,下面摘录一下。
Form、PostForm、MultipartForm说明
简要说明一下
Form:存储了post、put和get参数,在使用之前需要调用ParseForm方法。
PostForm:存储了post、put参数,在使用之前需要调用ParseForm方法。
MultipartForm:存储了包含了文件上传的表单的post参数,在使用前需要调用ParseMultipartForm方法。
网上比较常见的一个版本是:
其中r表示*http.Request类型,w表示http.ResponseWriter类型。
r.Form是url.Values字典类型,r.Form["id"]取到的是一个数组类型。因为http.request在解析参数的时候会将同名的参数都放进同一个数组里,所以这里要用[0]获取到第一个。
这种取法在通常情况下都没有问题,但是如果是如下请求则无法取到需要的值:
因为r.Form包含了get和post参数,并且以post参数为先,上例post参数和get参数都有id,所以应当会取到post参数2。虽然这种情况并不多见,但是从严谨的角度来看程序上还是应当处理这种情况。立马补上改进代码:
代码比较简单,就是分析url问号后的参数。事实上这个也是标准库ParseForm中关于get参数解析代码。
这里要分两种情况:
普通的post表单请求,Content-Type=application/x-www-form-urlencoded
有文件上传的表单,Content-Type=multipart/form-data
第一种情况比较简单,直接用PostFormValue就可以取到了。
第二种情况复杂一些,如下表单:
因为需要上传文件,所以表单enctype要设置成multipart/form-data。此时无法通过PostFormValue来获取id的值,因为golang库里还未实现这个方法:
golang中不能用PostForm获取post参数
幸好golang中可以提供了另外一个属性MultipartForm来处理这种情况。
感谢:在测试post的时候,一开始都是以第二种情况来测试的,所以造成了一个误区以为PostFormValue无法取到值。这里感谢@九头蛇龙 的纠正。
r.Cookie返回*http.Cookie类型,可以获取到domain、过期时间、值等数据。
在折腾的过程中看了下net/http包中的源码,感觉在web开发中还是有很多不完善的地方。作为使用者来讲,最希望就是直接通过一个方法取到相应的值就可以了,期待官方团队尽早完善。
转载:http://www.01happy.com/golang-web-get-request-params/
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.Form是url.Values字典类型,r.Form["id"]取到的是一个数组类型。因为http.request在解析参数的时候会将同名的参数都放进同一个数组里,所以这里要用[0]获取到第一个。
这种取法在通常情况下都没有问题,但是如果是如下请求则无法取到需要的值:
获取POST参数
这里要分两种情况:普通的post表单请求,Content-Type=application/x-www-form-urlencoded
有文件上传的表单,Content-Type=multipart/form-data
第一种情况比较简单,直接用PostFormValue就可以取到了。
golang中不能用PostForm获取post参数
幸好golang中可以提供了另外一个属性MultipartForm来处理这种情况。
获取COOKIE参数
小结
在折腾的过程中看了下net/http包中的源码,感觉在web开发中还是有很多不完善的地方。作为使用者来讲,最希望就是直接通过一个方法取到相应的值就可以了,期待官方团队尽早完善。转载:http://www.01happy.com/golang-web-get-request-params/
相关文章推荐
- 欧莱雅浅谈OC中方法调用的顺序中的Category
- 浅谈OC中的Category
- 在线Google字体库
- Google I/O 2016笔记之图像压缩
- mongo数据项目应用
- go float 相等比较
- go reflect struct 遍历,反射
- go语言的beedb
- Django中的Form
- 从编译到使用 - ngrok 服务搭建
- Google Test资料
- Xcode集成Google Test
- google快捷键,通过浏览器本身来查看
- [ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG
- algorithm 题集五 (16.07.20)
- Good Bye 2014
- 会飞的汽车真能改变世界吗?
- mongoose学习文档
- django 扩展User
- 配置go服务器