Golang 容器和不同header的解析
记录一下,用golang实现一个静态资源容器,膜拜下强人
http.Handle("/", http.FileServer(http.Dir(currentPath+"/static/")))
非常好用,有机会,试一下其他的框架
PS,Golang对于不同header的解析方法不一样啊……
在这里做个总结记录一下:
1. 普通的表单提交
// ParseForm populates r.Form and r.PostForm.
// For other HTTP methods, or when the Content-Type is not
// application/x-www-form-urlencoded, the request Body is not read, and
// r.PostForm is initialized to a non-nil, empty value.
func (r *Request) ParseForm() error 先使用 ParseForm()解析 request 后,再读取参数(application/x-www-form-urlencoded) 2. 传文件使用的表单提交
multipart/form-data
同样是表单提交,解析 request 的方式和 application/x-www-form-urlencoded 完全不一样,也是本次开发踩的印象最深的坑。
如果要获取 form-data 中的参数,在已知 key 的情况下,
code = r.FormValue("code")
3. application/json
和1一样是最常用,贴在这里做个记录:
err := json.NewDecoder(r.Body).Decode(m)
if nil != err {
w.WriteHeader(400)
logs.Error("Illegal params: ", m)
}
定义出 json 串的结构体,一个key都不能少,就可以通过 Decoder 获取参数了 4. 发表单请求比较优雅的方式:
param := url.Values{}
param.Set("client_id", clientId)
param.Set("client_secret", clientSecret)
param.Set("grant_type", grantType)
param.Set("code", code)
param.Set("response_type", "code")
param.Set("redirect_uri", redirectUri)
fmt.Println(param)
logs.Debug("The params is ", param)
req, err := http.NewRequest("POST", passportUrl, bytes.NewBufferString(param.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
Golang 容器和不同header的解析的更多相关文章
- 给jdk写注释系列之jdk1.6容器(6)-HashSet源码解析&Map迭代器
今天的主角是HashSet,Set是什么东东,当然也是一种java容器了. 现在再看到Hash心底里有没有会心一笑呢,这里不再赘述hash的概念原理等一大堆东西了(不懂得需要先回去看下Has ...
- 给jdk写注释系列之jdk1.6容器(5)-LinkedHashMap源码解析
前面分析了HashMap的实现,我们知道其底层数据存储是一个hash表(数组+单向链表).接下来我们看一下另一个LinkedHashMap,它是HashMap的一个子类,他在HashMap的基础上维持 ...
- 给jdk写注释系列之jdk1.6容器(7)-TreeMap源码解析
TreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解. 要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链 ...
- 给jdk写注释系列之jdk1.6容器(4)-HashMap源码解析
前面了解了jdk容器中的两种List,回忆一下怎么从list中取值(也就是做查询),是通过index索引位置对不对,由于存入list的元素时安装插入顺序存储的,所以index索引也就是插入的次序. M ...
- Spring IOC容器启动流程源码解析(四)——初始化单实例bean阶段
目录 1. 引言 2. 初始化bean的入口 3 尝试从当前容器及其父容器的缓存中获取bean 3.1 获取真正的beanName 3.2 尝试从当前容器的缓存中获取bean 3.3 从父容器中查找b ...
- golang 容器的学习与实践
golang 提供了几个简单的容器供我们使用,本文在介绍几种Golang 容器的基础上,实现一个基于Golang 容器的LRU算法. 容器介绍 Golang 容器位于 container 包下,提供了 ...
- Golang里实现Http服务器并解析header参数和表单参数
在http服务里,header参数和表单参数是经常使用到的,本文主要是练习在Go语言里,如何解析Http请求的header里的参数和表单参数,具体代码如下: package server import ...
- 给jdk写注释系列之jdk1.6容器(2)-LinkedList源码解析
LinkedList是基于链表结构的一种List,在分析LinkedList源码前有必要对链表结构进行说明. 1.链表的概念 链表是由一系列非连续的节点组成的存储结构,简单分下类的话,链 ...
- 给jdk写注释系列之jdk1.6容器(12)-PriorityQueue源码解析
PriorityQueue是一种什么样的容器呢?看过前面的几个jdk容器分析的话,看到Queue这个单词你一定会,哦~这是一种队列.是的,PriorityQueue是一种队列,但是它又是一种什么样的队 ...
随机推荐
- python发送html格式的邮件
python发邮件 #!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMET ...
- CSRF与JSON
之前遇到提交json的请求想要进行csrf攻击都是用的闭合表单的方法,很笨很麻烦, 这次看到了别人的操作记录一下. 这里用到了ajax异步请求(但是这里我有个疑问就是:这里用到了cors跨域,是不是必 ...
- Docker 基础 (一)
为什么要使用 Docker? 作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势.首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多. 其次,Doc ...
- C#串口通信遇到的坑
C#串口通信中有一个DataReceived事件可以委托一个接收函数.此接收函数是运行在辅线程(secondary thread)上的.如果要在这个函数中修改主线程中的一些元素,比如UI界面上的变量的 ...
- java并发之线程间通信
1.volatile 关键字 java 支持多个线程同时访问一个对象或对象的成员变量,而每个线程拥有这个变量的拷贝,虽然对象或成员变量分配的内存在共享内存,但每个执行的线程可以拥有一份拷贝,可以提高程 ...
- AES,BigInteger,MD5加密
http://tool.oschina.net/apidocs/apidoc?api=jdk-zh package cn.com.gome.cashier.web; import java.lang. ...
- three.js 3d三维网页代码加密的实现方法
http://www.jiamisoft.com/blog/17827-three-js-3dsanweiwangyejiami.html https://www.html5tricks.com/ta ...
- 2019/4/2 wen 多态、抽象
- python学习笔记:装饰器2
python的装饰器本质是函数,为了不改变装饰目标函数内部代码而增加额外功能而存在 一.一般装饰函数实例: import datetime def func_name(func):#定义一个装饰函数, ...
- socket实现文件传输
server:===========================================import socketimport structimport jsonsk = socket.s ...