Toggle Navigation
首页
Golang
PHP
Laravel
Magento
Linux
数据库
MySQL
Redis
Mongodb
热门知识
程序与生活
架构师之路
静态站点
GitHub
主页
Golang web开发获取get、post参数
Golang web开发获取get、post参数
09-18
Mark
950
首先先理解一下golang http.request的三个属性Form、PostForm、MultipartForm,然后才能很好的理解,简要说明如下: - Form:存储了post、put和get参数,在使用之前需要调用ParseForm方法。 - PostForm:存储了post、put参数,在使用之前需要调用ParseForm方法。 - MultipartForm:存储了包含了文件上传的表单的post参数,在使用前需要调用ParseMultipartForm方法。 ## 获取GET参数 网上比较常见的一个版本是: ```golang r.ParseForm() if len(r.Form["name"]) > 0 { fmt.Fprintln(w, r.Form["name"][0]) } ``` 其中r表示*http.Request类型,w表示http.ResponseWriter类型。r.Form是url.Values字典类型,r.Form["id"]取到的是一个数组类型。因为http.request在解析参数的时候会将同名的参数都放进同一个数组里,所以这里要用[0]获取到第一个。 这种取法在通常情况下都没有问题,但是如果是如下请求则无法取到需要的值: ```html <form action="http://127.0.0.1:9090/?name=mark" method="POST"> <input type="text" name="name" value="best" /> <input type="submit" value="submit" /> </form> ``` 因为r.Form包含了get和post参数,并且以post参数为先,上例post参数和get参数都有id,所以应当会取到post参数2。虽然这种情况并不多见,但是从严谨的角度来看程序上还是应当处理这种情况: ```golang queryForm, err := url.ParseQuery(r.URL.RawQuery) if err == nil && len(queryForm["name"]) > 0 { fmt.Fprintln(w, queryForm["name"][0]) } ``` 代码比较简单,就是分析url问号后的参数。事实上这个也是标准库ParseForm中关于get参数解析代码。 ## 获取POST参数 这里要分两种情况: - 普通的post表单请求,Content-Type=application/x-www-form-urlencoded - 有文件上传的表单,Content-Type=multipart/form-data 第一种情况比较简单,直接用PostFormValue就可以取到了: ```golang r.ParseForm() fmt.Fprintln(w, r.PostFormValue("name")) ``` 第二种情况复杂一些,如下表单: ```html <form action="http://127.0.0.1:9090" method="POST" enctype="multipart/form-data"> <input type="text" name="name" value="markbest" /> <input type="file" name="pic" /> <input type="submit" value="submit" /> </form> ``` 因为需要上传文件,所以表单enctype要设置成multipart/form-data,此时需要使用ParseMultipartForm方可解析: ```golang r.ParseMultipartForm(32 << 20) fmt.Println(r.PostForm) fmt.Println(r.MultipartForm.File) ``` 这样子就能获取post参数以及上传的文件参数。
最新文章
Golang内存问题处理
WebSocket详解
Gopher面试中的Coding(三)
Golang用os/signal包实现平滑重载配置文件
Nginx实现负载均衡的几种方式
Golang中子goroutine与主协程同步的四种实现
Dockerfile文件详解
Golang开发微信公众号
最热文章
Magento实现下载csv数据表格
1887
Laravel带有条件搜索的分页
1808
Magento上传文件、缩略图和导出CSV
1758
Golang开发微信公众号
1728
Magento添加Advanced Dataflow
1715
Magento后台添加rule规则
1639
Magento优化 – MySQL读写分离
1589
Magento常用模块分享
1517
热门标签
下载
laravel分页
上传
导出
微信公众号
Dataflow
rule
规则
读写分离
模块
shell
正则
内存泄漏
Collection
binlog
命名空间
Git
处理
composer
string
package
解锁
锁表
redis sentinel
函数
事务处理
time
架构
系统
读写
golang
事务处理
缓存
日志分析
进阶
schedule
fmt
表分割
Gopher面试
交叉编译
日志分割
事务
分布式锁
HTTPS
Dockerfile
mongodb
channel
git服务器
gogs
php
protobuf
重载配置
版本号
多数据库
负载均衡
concat
mongodb
日志过滤
发展方向
defer
panic
模型关系
goroutine
json
get
post
protobuf
golang算法
代码部署
算法
rpc
docker
elasticsearch
redis
写文件
主从配置
websocket
laravel
package
生成插件
直接下载
数据类型
curl
并发
量级
错误传递
成长
Shell
Go指针
grpc
方法
参数
队列
protobuf
Redis持久化
路上
风景
yum