如何使用Angular模拟curl命令

时间:2015-08-13 13:49:26

标签: angularjs http authentication post curl

我有这个curl命令,我想用angular进行模拟:

curl -k -F fieldName=@data.json -u username:Password url

此刻我开始做一个有角度的帖子。但是,我遇到了身份验证问题。我没有参数来输入用户ID和密码。

角度代码:

   $scope.postCall = function () {
        $scope.ngResult = "clicked";

        var paramsJson = {
            "imessageIdT": $scope.messageIdT,
            "ilobT": $scope.lobT,
            "iregionIdT": $scope.regionIdT,
            "iassetClassT": $scope.assetClassT,
            "additionalInfoT": $scope.additionalInfoT

        };

      var config = {
        paramsJson: paramsJson
      };

      $http.post("WEBSITE", paramsJson, config)
        .success(function (data, status, headers, config)
        {
          $scope.ngResult = logResult("POST SUCCESS", data, status, headers, config);
          //$scope.ngResult = "Yes";
        })
        .error(function (data, status, headers, config)
        {
          $scope.ngResult = logResult("POST ERROR", data, status, headers, config);

          //$scope.ngResult = "No";
        });


    };  

2 个答案:

答案 0 :(得分:2)

假设基本身份验证未经测试,则可能有效:

var username = "...", password = "***";
var config = {
    headers: {
        Authorization: "Basic " + window.btoa(username+":"+password)
    },
    method: "get", // or "post",
    url: "destination.com"
};

$http(config).success(function(){
    // on success
}).error(function(){
    // on failure
});

我唯一不确定的是window.btoa,如果它是符合RFC2045-MIME标准的Base64变体,那么你就是好的。

但我的例子是过度简化。实质上,您应该确定服务器支持的身份验证方案。它可以是IANA指定的以下任何一个:

  • 基本
  • 承载
  • 摘要
  • HOBA
  • 协商
  • 的OAuth

根据所需的方案,您应该相应地撰写请求标头。

答案 1 :(得分:1)

这取决于你要连接的api。通常您会记录,服务器将在响应的标头上返回一个身份验证令牌。 1基本身份验证Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 2 Aoth2 Authorization: Bearer mF_9.B5f-4.1JqM

因此,您需要将此标头添加到您的请求中:

 $http.post("WEBSITE", paramsJson, angular.extend({}, config, {headers: {
    'Authorization': token}}))

如果请求是另一个域,则应使用jsonp。