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

如何在golang中以标准方式从http请求中获取数据?

如何在golang中以标准方式从http请求中获取数据?

Go
SMILET 2021-12-27 17:50:29
我正在尝试从 golang 中的 http 请求中获取数据。我正在使用 net/http 包。在我的服务器处理程序中,我试图从 r.Body 获取数据body, err := ioutil.ReadAll(r.Body)if err != nil {    log.Printf("FATAL IO reader issue %s ", err.Error())}当我使用一些输入数据卷曲服务时,它工作正常。curl --data '{"AppName":"Proline","Properties":null,"Object":"","Timestamp":"2016:03:27 00:08:11"}' -XGET http://localhost:8081/api/services/test/但是当我尝试从 ajax call 调用这个服务时,r.Body 是空的。requestJSON = '{"AppName":"Proline","Properties":null,"Object":"","Timestamp":"2016:03:27 00:08:11"}'$.ajax({  type: "GET",  url: "http://localhost:8081/api/services/test/",  data: requestJSON,  contentType: "application/json; charset=utf-8",  dataType: "json",  success: function(data){alert(data);},  failure: function(errMsg) {      alert(errMsg);  }});所以我改为从 r.Formr.ParseForm()var body []bytefor key, _ := range r.Form {    body = []byte(key)    break}但是现在 curl 请求失败了。有没有标准的方法可以从 golang 的 http 请求中检索输入数据?我正在使用 Go 1.6。有人可以帮我解决这个问题吗?
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

规范不允许使用 GET 请求发送有意义的正文。所以你的浏览器可能正在发送一个空的正文。您可以改用 POST。不出所料,r.ParseForm()它不起作用,因为它希望主体由application/x-www-form-urlencoded. 不是json。


如果 GET 更适合将用户输入发送到您服务器的请求处理程序,您可以使用 url 查询参数。


为数据参数引用 JQuery.ajax()文档,


要发送到服务器的数据。如果不是字符串,则将其转换为查询字符串。它附加到 GET 请求的 url。请参阅 processData 选项以防止此自动处理。对象必须是键/值对。


所以你可以这样做,


$.ajax({

  type: "GET",

  url: "http://localhost:8081/api/services/test/",

  data: {AppName: "Proline", Properties:null, Object: ""}, // An object, not a string.

  contentType: "application/json; charset=utf-8",

  dataType: "json",

  success: function(data){alert(data)}

})

在服务器中,


params := r.URL.Query()

params.Get('AppName') // returns 'Proline'

请参阅文档:https : //golang.org/pkg/net/url/#URL.Query


查看完整回答
反对 回复 2021-12-27
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号