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

我正在尝试从 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.Form


r.ParseForm()

var body []byte

for key, _ := range r.Form {

    body = []byte(key)

    break

}

但是现在 curl 请求失败了。有没有标准的方法可以从 golang 的 http 请求中检索输入数据?我正在使用 Go 1.6。有人可以帮我解决这个问题吗?


SMILET
浏览 158回答 1
1回答

幕布斯6054654

规范不允许使用 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go