无法从 go 中的 r.PostFormValue 中提取值?

我尝试使用net / http PostFormValue从HTTP POST请求正文(在我的简单Go HTTP服务器中)中提取值,当我通常查找任何键时,我的输出是一个空字符串,但在我的情况下,尝试获取用于HMAC检查。我使用Postman使用Gorilla / mux路由器将请求发送到我的localhost:8080实例,并设置了标头。hub.secretContent-Type: application/x-www-form-urlencoded


我的处理程序看起来像这样:


func rootPostHandler(w http.ResponseWriter, r *http.Request) {


    var expectedMac []byte


    body, err := ioutil.ReadAll(r.Body)

    if err != nil {

        http.Error(w, err.Error(), http.StatusInternalServerError)

        return

    }

    log.Println("r.Body is:", string(body)) // debug: print the request POST body


    message := body // debug: set message just for extra clarity


    errParse := r.ParseForm()

    if errParse != nil {

        // handle err

    }

    secret := []byte(r.PostFormValue("hub.secret"))

    log.Println("secret is: ", string(secret))

    

    

    mac := hmac.New(sha256.New, secret)

    mac.Write(message)

    expectedMac = mac.Sum(nil)

    fmt.Println("Is HMAC equal? ", hmac.Equal(message, expectedMac))


    w.Header().Add("X-Hub-Signature", "sha256="+string(message))

}

正文:


hub.callback=http%253A%252F%252Fweb-sub-client%253A8080%252FbRxvcmOcNk&hub.mode=subscribe&hub.secret=xTgSGLOtPNrBLLgYcKnL&hub.topic=%252Fa%252Ftopic

打印等的输出是空字符串,这意味着它找不到,对吧?我在这里错过了什么?secrethub.secret


倚天杖
浏览 170回答 1
1回答

森林海

应用程序将请求正文读取到以下行上的 EOF:body, err := ioutil.ReadAll(r.Body)ParseForm 返回一个空窗体,因为正文位于以下行的 EOF:errParse := r.ParseForm()从网络连接读取请求正文。无法再次读取请求正文。删除对 ioutil 的调用。ReadAll 或使用从 ioutil 返回的数据创建新的正文读取器。阅读全文:r.Body = io.NopCloser(bytes.NewReader(body))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go