Angular Js Curl -d http请求

时间:2016-04-19 14:22:04

标签: javascript angularjs curl

我的角度应用程序出了问题:

我有一个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请求的菜鸟,有人可以给我一些建议吗?

很多!

此致

1 个答案:

答案 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=" ...