为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
倚天杖 2022-08-24 18:54:50
我尝试使用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
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

应用程序将请求正文读取到以下行上的 EOF:

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

ParseForm 返回一个空窗体,因为正文位于以下行的 EOF:

errParse := r.ParseForm()

从网络连接读取请求正文。无法再次读取请求正文。

删除对 ioutil 的调用。ReadAll 或使用从 ioutil 返回的数据创建新的正文读取器。阅读全文:

r.Body = io.NopCloser(bytes.NewReader(body))


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信