我的角度应用程序出了问题:
我有一个Curl请求在我的终端中正常工作:
curl -d "grant_type=password&client_id=IDXXXXXX&client_secret=SECRET&username=USERNAME&password=PASSWORD" https://MYINSTANCE/oauth_token.do
现在我想用角度JS来使用它。
这是我试过的:
var getDatas = {
grant_type: "password",
client_id: "ID",
client_secret : "PASS",
username : "USER",
password : "PASSWORD"
}
$http({
method: 'GET',
url: 'https://MYINSTANCE/oauth_token.do',
data : JSON.stringify(getDatas)
}).then(function successCallback(response) {
alert("response : " + response);
}, function errorCallback(response) {
alert("error : " + response);
});
但该服务让我回复错误。
我是一个有角度的Curl请求的菜鸟,有人可以给我一些建议吗?
很多!
此致
答案 0 :(得分:2)
您的JS正在尝试发送包含正文数据的GET请求。当您使用-d
传递数据时,您的curl请求会隐式使用POST。此外,通过调用stringify
,您发送的数据是JSON字符串而不是标准POST格式。所以要让你的JS符合你的curl请求(如果你还使用jQuery):
$http({
method: 'POST',
url: 'https://MYINSTANCE/oauth_token.do',
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
data : $.param(getDatas)
})...
如果没有jQuery($.param
),您可以编写一个通用函数将对象转换为POST数据字符串:
var formData = new FormData();
formData.append("grant_type", "password");
formData.append("client_id", "ID");
...
$http({
...
data: formData
})...
或直接构建POST字符串:
data: "grant_type=password&client_id=" + client_id + "&secret=" ...