如何接受来自Go的POST请求并将输出写入文件?

时间:2015-05-29 18:56:58

标签: curl logging go

首先,我正在尝试在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 ^

2 个答案:

答案 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.Bodyioutil读取数据,并将该数据写入包含相同包的文件中。

这仅用于处理 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)
    }
}