Golang HTTP POST请求处理

我在使用Golang处理HTTP POST请求时遇到了一些问题。当客户端发送JSON数据时,我该如何正确解析请求体?有时候会出现EOF错误,特别是在请求体较大的情况下。另外,在处理multipart/form-data类型的POST请求时,怎样才能高效地上传和保存文件?希望能了解标准的处理流程和常见错误的规避方法。

2 回复

在Golang中处理HTTP POST请求,使用http.HandleFunc注册路由,通过r.ParseForm()解析表单数据,然后使用r.PostFormValue("key")获取参数值。示例代码:

http.HandleFunc("/post", func(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
        r.ParseForm()
        value := r.PostFormValue("key")
        fmt.Fprintf(w, "Received: %s", value)
    }
})
http.ListenAndServe(":8080", nil)

更多关于Golang HTTP POST请求处理的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,处理HTTP POST请求主要涉及解析请求体中的数据(如表单数据、JSON等)。以下是常见场景的示例:

1. 解析表单数据

package main

import (
    "fmt"
    "net/http"
)

func formHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method != "POST" {
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
        return
    }
    
    // 解析表单
    if err := r.ParseForm(); err != nil {
        http.Error(w, "Bad Request", http.StatusBadRequest)
        return
    }
    
    // 获取表单值
    name := r.FormValue("name")
    email := r.FormValue("email")
    
    fmt.Fprintf(w, "Name: %s\nEmail: %s", name, email)
}

func main() {
    http.HandleFunc("/submit", formHandler)
    http.ListenAndServe(":8080", nil)
}

2. 解析JSON数据

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type User struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}

func jsonHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method != "POST" {
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
        return
    }
    
    var user User
    decoder := json.NewDecoder(r.Body)
    if err := decoder.Decode(&user); err != nil {
        http.Error(w, "Invalid JSON", http.StatusBadRequest)
        return
    }
    defer r.Body.Close()
    
    fmt.Fprintf(w, "Received: %+v", user)
}

func main() {
    http.HandleFunc("/api/user", jsonHandler)
    http.ListenAndServe(":8080", nil)
}

关键点说明:

  1. 方法检查:使用 r.Method 验证请求方法
  2. 数据解析
    • 表单数据:r.ParseForm() + r.FormValue()
    • JSON数据:json.NewDecoder(r.Body).Decode()
  3. 错误处理:始终处理可能的解析错误
  4. 资源释放:JSON处理结束后记得关闭请求体

测试时可以使用curl:

# 测试表单
curl -X POST -d "name=John&email=john@example.com" http://localhost:8080/submit

# 测试JSON
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","email":"john@example.com"}' http://localhost:8080/api/user

根据实际需求选择合适的数据解析方式,并注意添加必要的安全验证和错误处理。

回到顶部