Ajax 如何在golang中以标准方式从http请求中获取数据?
我正在尝试从golang中的http请求获取数据。我正在使用net/http包。在我的服务器处理程序中,我试图从r.Body获取数据Ajax 如何在golang中以标准方式从http请求中获取数据?,ajax,http,curl,go,Ajax,Http,Curl,Go,我正在尝试从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
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。有人能帮我吗?规范不允许通过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'
请参阅文档:规范不允许使用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'
请参阅文档:您是否尝试过以POST的形式发送?@非高尔夫球手-POST与
r.Form
配合良好。无法在GET中发送数据吗?[但这可能不是一个好的做法]。带有正文的http GET请求是不常见的。我认为这也违反了规范。所以我认为你的浏览器不允许这样做。是的,这不是一个好的做法。使用POST@ArunaHerath-Hmmm。如果我想通过API传递一些id等来获取一些值,我需要在输入权限中添加id。您可以使用POST(在正文中包含数据)或get(可能使用包含要验证的凭据的标题)。身体不行。你试过用POST发送吗?@Not_a_高尔夫球手-POST在r.Form
上运行良好。无法在GET中发送数据吗?[但这可能不是一个好的做法]。带有正文的http GET请求是不常见的。我认为这也违反了规范。所以我认为你的浏览器不允许这样做。是的,这不是一个好的做法。使用POST@ArunaHerath-Hmmm。如果我想通过API传递一些id等来获取一些值,我需要在输入权限中添加id。您可以使用POST(在正文中包含数据)或get(可能使用包含要验证的凭据的标题)。你不能和一具尸体混在一起。