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

Golang net/http 请求体总是空的

Golang net/http 请求体总是空的

Go
白板的微信 2021-09-10 15:30:26
我正在尝试将 JSON 参数发送到我的服务器并使用 json.Decoder 解析它们。我读过您应该能够从 request.Body 属性中获取查询参数。以下是我的服务器代码:func stepHandler(res http.ResponseWriter, req *http.Request) {    var v interface{}    err := json.NewDecoder(req.Body).Decode(&v)    if err != nil {       // handle error    }    log.Println(v)}每次,我都会看到2014/12/26 22:49:23 <nil>(当然是差异时间戳)。我的客户端 AJAX 调用如下:$.ajax({  url: "/step",  method: "get",  data: {    steps: $("#step-size").val(),    direction: $("#step-forward").prop("checked") ? 1 : -1,    cells: JSON.stringify(painted)  },  success: function (data) {    painted = data;    redraw();  },  error: function (xhr) {    console.log(xhr);  }});发送内容的示例 URL:http://localhost:5000/?steps=1&direction=1&cells=%5B%7B%22row%22%3A11%2C%22column%22%3A15%7D%2C%7B%22row%22%3A12%2C%22column%22%3A15%7D%5D更好地查看参数:{  steps: "1",  direction: "1",  cells: "[{"row":11,"column":15},{"row":12,"column":15}]"}我已经尝试过 GET 和 POST 请求。为什么我的 req.Body 从不解码?如果我尝试单独打印 req.Body,我也会看到 nil。
查看完整描述

2 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

req.Body确实是空的——所以,我会调用它req.ParseForm()然后使用它req.FormBody不会获得绝对不在请求正文中的内容(例如查询参数)。


查看完整回答
反对 回复 2021-09-10
?
守着一只汪

TA贡献1872条经验 获得超3个赞

Body请求沿着有效载荷内发送-它不是URL的一部分。

您正在尝试访问正文 .. 当您的数据确实在 URL 中时。

你想让它改变你的 ajaxmethod: "get"是什么method: "post"- 以便数据与正文一起发布,而不是作为 URL 的一部分。您还应该确保数据确实通过您选择的浏览器的开发人员工具与请求一起发送。或者,如果您确实希望将数据作为 URL 的一部分发送,您应该访问URL请求的参数 - 并手动将值解析为结构(json 包不会为您执行此操作 IIRC)。


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 348 浏览
慕课专栏
更多

添加回答

举报

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