golang多次读取http request body问题分析
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/http/httptest"
)
func main() {
// 创建一个简单的http服务器,处理请求
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// 读取请求体两次,这可能会引发错误,因为请求体常常只能被读取一次
bodyBytes, _ := ioutil.ReadAll(r.Body)
fmt.Fprintln(w, "第一次读取请求体:", string(bodyBytes))
bodyBytes, _ = ioutil.ReadAll(r.Body)
fmt.Fprintln(w, "第二次读取请求体:", string(bodyBytes))
}))
defer server.Close()
// 发送http请求
resp, err := http.Post(server.URL, "text/plain", nil)
if err != nil {
panic(err)
}
defer resp.Body.Close()
// 读取并打印服务器响应的内容
bodyBytes, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(bodyBytes))
}
这段代码首先使用httptest.NewServer
创建了一个模拟的HTTP服务器,并注册了一个处理函数。在处理函数中,我们尝试读取请求体两次。然后,我们发送一个POST请求到这个服务器,并打印出服务器的响应。这个例子展示了如何创建一个简单的服务器,并如何模拟发送请求和读取响应。
评论已关闭