如何从具有基本身份验证的 rest api 获取数据?

Posted

技术标签:

【中文标题】如何从具有基本身份验证的 rest api 获取数据?【英文标题】:How to get data from rest api which has basic authentication? 【发布时间】:2017-11-23 16:45:05 【问题描述】:

我正在尝试通过 HTTP get 方法从该网站获取数据。该网站具有基本身份验证。数据为 JSON 格式。 这是其余的 api 网站: (https://shoploapi.herokuapp.com/sellers)

// Code goes here
angular.module('myapp', ['myapp.controller']);

angular.module('myapp.controller', ['myapp.service'])
  .controller('testController', function($scope, testService) 

    $scope.posts = ;

    function GetAllPosts() 
      var getPostsData = testService.getPosts();

      getPostsData.then(function(post) 
        $scope.posts = post.data;

      , function() 
        alert('Error in getting post records');
      );
    

    GetAllPosts();
  );

angular.module('myapp.service', [])
  .service('testService', function($http) 

    //get All NewsLetter
    this.getPosts = function() 
      return $http.get('https://shoploapi.herokuapp.com/sellers');
    ;
  );
angular.module('myApp', ['base64'])
  .config(function($httpProvider, $base64) 
    var auth = $base64.encode("bhupendra7:ice123age456");
    $httpProvider.defaults.headers.common['Authorization'] = 'Basic ' + auth;
  );
<!DOCTYPE html>
<html>

<head>
  <script data-require="angular.js@1.5.0" data-semver="1.5.0" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-base64/2.0.5/angular-base64.js"></script>
  <link rel="stylesheet" href="style.css">
  <script src="script.js"></script>
</head>

<body ng-app="myapp">
  <h1>Hello Plunker!</h1>
  <div ng-controller="testController">
    <div>
      <ul>
        <li ng-repeat="post in posts">
          post.careof post.district post.gender post.name
        </li>
      </ul>
    </div>
  </div>
</body>

</html>

这是我的 Plunker 的链接:

(https://plnkr.co/edit/7pqljm?p=preview)

谁能帮忙?

【问题讨论】:

你在angular.module('myApp', ['base64']) 中有一个错字将myApp 改成myapp .. 即使改正了,你也会面临另一个问题,testController 是undefined。如果您需要更多帮助,请告诉我 【参考方案1】:

您的代码中有 2 个问题。

1.你有错别字

angular.module('myApp', ['base64'])中,将模块名称改为myapp

2。您将myapp.controller 注入到myapp 模块的方式

将其更改为angular.module('myapp', []); 您还需要重新排序您的代码。查看我为您创建的Plunker。

即使你解决了上述两个问题,你仍然会面临来自 Heroku 的CORS 问题。根据您的服务器端技术(NodeJS、Rails 等),您需要从服务器启用它才能与您的应用程序通信。也可以关注JSONP with AngularJS

希望对你有帮助

【讨论】:

谢谢您,先生。你能帮我么。我已经尝试了很长时间。我需要做什么才能获取数据? 您使用什么技术编写了您的服务器应用程序? 服务端应用写在nodejs上。数据库使用MongoDB,Web框架使用Expressjs。 查看此链接以使用 ExpressJS 配置 CORS:github.com/expressjs/cors 与 Heroku 和 NodeJS+Express 相关的更具体问题:***.com/questions/11001817/…

以上是关于如何从具有基本身份验证的 rest api 获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Security 做一个 RESTful 登录 API?

Spring boot 如何让 Thymeleaf 网页和 REST API 具有不同的身份验证方案

django rest 框架身份验证

SPA 使用的经过身份验证的 Rest API:如何获取用于登录和注册表单的 CSRF 令牌?

具有 REST 身份验证 API 的节点快递网站 - CORS 问题

如何存储 RESTful API 的身份验证数据