首先,我正在尝试在Go中创建一个日志服务,它是一个轻量级服务器,接受来自我服务的日志数据的POST请求。我正在Go中编写这个服务,因为它应该很快并且一次处理很多POST请求。那是我的逻辑吗?
无论如何,这是我的问题。我正在发送这样的POST请求来测试:
curl -H "Content-Type: application/json" -X POST -d '{"hello":"world"}' http://localhost:8080/log
到目前为止,这是我的Go脚本:
package main
import (
"fmt"
"log"
"net/http"
)
func logger(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
fmt.Println(r.Form)
fmt.Println(r.FormValue("hello"))
}
func main() {
http.HandleFunc("/log", logger)
log.Fatal(http.ListenAndServe(":8080", nil))
}
正在输出:
map []
为什么?如何将POST数据写入服务器上的文件?
非常感谢! w ^
答案 0 :(得分:0)
您不是在发布表单,而是在请求正文中发送json数据。
直接阅读数据:
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println("ERROR:", err)
}
答案 1 :(得分:0)
r.Method
包含收到的请求类型(GET,POST,HEAD,PUT等)。
您可以使用r.Body
从ioutil
读取数据,并将该数据写入包含相同包的文件中。
这仅用于处理 POST 方法,读取数据和写入文件(output.txt)。
if r.Method == "POST" {
body, err := ioutil.ReadAll(r.Body)
if err != nil {
fmt.Errorf("Error during reading body: %v", err)
}
if err := ioutil.WriteFile("output.txt", body, 0644); err != nil {
fmt.Errorf("Error during writing data: %v", err)
}
}