美文网首页Go语言Golang语言社区go学习
Go 网络编程:解析请求数据

Go 网络编程:解析请求数据

作者: Aaaaaaaaaaayou | 来源:发表于2018-01-30 15:10 被阅读133次

几个重要的变量

http.request 中涉及到数据解析的几个重要变量为:

    // Form contains the parsed form data, including both the URL
    // field's query parameters and the POST or PUT form data.
    // This field is only available after ParseForm is called.
    // The HTTP client ignores Form and uses Body instead.
    Form url.Values

    // PostForm contains the parsed form data from POST, PATCH,
    // or PUT body parameters.
    //
    // This field is only available after ParseForm is called.
    // The HTTP client ignores PostForm and uses Body instead.
    PostForm url.Values

    // MultipartForm is the parsed multipart form, including file uploads.
    // This field is only available after ParseMultipartForm is called.
    // The HTTP client ignores MultipartForm and uses Body instead.
    MultipartForm *multipart.Form

说明:

Form:存储了post、put和get参数,在使用之前需要调用 ParseForm 方法。
PostForm:存储了post、put参数,在使用之前需要调用 ParseForm 方法。
MultipartForm:存储了包含了文件上传的表单的post参数,在使用前需要调用 ParseMultipartForm
 方法。

获取 GET 参数

因为 Form 中同时存储了 GET 和 POST 请求的参数,所以最好不要用该变量来获取 GET 参数,取而代之的方法为:

queryForm, err := url.ParseQuery(r.URL.RawQuery)
if err == nil && len(queryForm["id"]) > 0 {
    fmt.Fprintln(w, queryForm["id"][0])
}

获取 POST 参数

application/x-www-form-urlencoded 格式

r.ParseForm()
// 法一
r.PostForm["id"][0]
// 法二
r.PostFormValue["id"]

multipart/form-data 格式

普通参数

r.ParseMultipartForm(32<<20)
// 法一
r.PostForm["id"][0]
// 法二
r.PostFormValue["id"]

文件

    r.ParseMultipartForm(32 << 20)
    file, handler, err := r.FormFile("file")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()
    fmt.Fprintf(w, "%v", handler.Header)
    f, err := os.OpenFile("./test.txt", os.O_WRONLY|os.O_CREATE, 0666)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()
    io.Copy(f, file)

application/json 格式

type User struct {
    Name string `json:"username"`
    Pwd string `json:"password"`
}

type RetMessage struct {
    Code string `json:"code"`
    Msg string  `json:"msg"`
}

func processJson(w http.ResponseWriter, r *http.Request) {
    var u User
    if r.Body == nil {
        http.Error(w, "Please send a request body", 400)
        return
    }
    err := json.NewDecoder(r.Body).Decode(&u)
    if err != nil {
        http.Error(w, err.Error(), 400)
        return
    }
    fmt.Println(u)
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(RetMessage{"200", "ok"})
}

相关文章

  • Go 网络编程:解析请求数据

    几个重要的变量 http.request 中涉及到数据解析的几个重要变量为: 说明: 获取 GET 参数 因为 F...

  • iOS网络编程(四):缓存类NSURLCache介绍

    网络请求中缓存类NSURLCache常用属性和方法: 参考:iOS网络编程之六——数据缓存类NSURLCache使用解析

  • 五、Groovy语法(五)json、xml解析

    Groovy数据解析 一、json解析 请求网络数据并解析 二、xml解析 groovy解析xml数据 groov...

  • 一个Android菜鸟入门Flutter 笔记(二)

    1. 网络编程与JSON解析 默认的HttpClient请求网络 在 Flutter 中,所有网络编程框架都是以 ...

  • iOS之网络简解篇.

    网络 HTTP请求 GET请求 POST请求 数据解析 JSONNSJSONSerialization XMLSA...

  • 网络

    NSURLConnection NSURLSession 普通网络请求 JSON数据解析 JSON序列化 数据解析...

  • Flutter 网络编程

    Flutter 网络编程即是 Dart 的网络编程。 基本使用 下面是一个 get 请求的示例。 json 解析完...

  • Python HTTP 库:requests 入门

    初识 requests在网络编程中,最最基本的任务包含: 发送请求登录获取数据解析数据反序列化打印内容我们以 Gi...

  • 20201104日记

    今日总结: 白天满课 写了一下晚上开会内容 go网络编程 明日计划: 实现树 复习离散 数据结构课 go网络编程 ...

  • AFNetworking

    http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众...

网友评论

    本文标题:Go 网络编程:解析请求数据

    本文链接:https://www.haomeiwen.com/subject/xhzqzxtx.html