zoukankan      html  css  js  c++  java
  • 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")



  • 相关阅读:
    Kubernetes 再深入一点点
    10分钟完成 mongodb replSet 部署
    网络篇
    p2p 打洞专场(转)
    Dockerfile 编写
    关于github 代码管理,协作开发
    Kubernetes 基于 ubuntu18.04 手工部署 (k8s)
    备忘 ubuntu ip 及 dns 的坑
    各种语言web性能简单对比测试
    vue 按需加载
  • 原文地址:https://www.cnblogs.com/spillage/p/7119587.html
Copyright © 2011-2022 走看看