【问题标题】:How to simulate curl command with Angular如何使用 Angular 模拟 curl 命令
【发布时间】:2015-08-13 13:49:26
【问题描述】:

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

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

目前我正在做一个有角度的帖子。但是,我遇到了身份验证问题。我没有参数可以输入用户名和密码。

角度代码:

   $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";
        });


    };  

【问题讨论】:

  • How to use Curl in javascript 的可能重复项
  • @SergiuParaschiv Angular 中没有实现吗?
  • 为什么会有一个? AngularJS 是一个 JavaScript 框架。任何用 JavaScript 为浏览器编写的东西都可以工作。该任务与 AngularJS 相关,与 Backbone 或 NodeJS 一样多。在该答案中使用该库后,您需要做的唯一 AngularJS 事情是在收到响应时发送 $scope.$apply,就像 $http 所做的那样。

标签: angularjs http authentication post curl


【解决方案1】:

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

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,如果它是 Base64 的 RFC2045-MIME 兼容变体,那么你很好。

但我的例子过于简单化了。本质上,您应该确定服务器支持的身份验证方案。可以是IANA指定的以下任意一种:

  • 基本
  • 承载者
  • 摘要
  • 霍巴
  • 协商
  • OAuth

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

【讨论】:

  • 您是否也将 paramsJson:paramsJson 放入配置中?
  • 如果您查看 $http 的角度文档会有所帮助,API 确实没有提及名为 paramJson 的属性。如果您正在发出 GET 请求,请考虑使用 param 属性指定请求数据。但是,如果您正在发出 POST 请求,那么 data 属性会更合适。你可能想要的是这样的:config = { /* ... */ param: {name: "some-name", age: 44 }};.
  • @IgweKalu 的上述答案是正确答案。为了让我的 AngularJS 调用更友好一些,尽管我做了 var userPass = window.btoa(username":"password) 外面的承诺,只是基于这个 var:{ ... Authorization: 'Basic + userPass'}跨度>
【解决方案2】:

这取决于您要连接的 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2018-03-26
    • 1970-01-01
    • 2021-05-02
    • 2012-12-02
    • 2015-08-06
    相关资源
    最近更新 更多