2

我正在尝试使用 Angular 创建一个使用我的 API 的简单应用程序。我正在使用虚拟机运行代码,并在我的计算机上访问它,因此要从我的机器调用 API,我可以使用 cURL 或任何其他 HTTP 客户端,一切正常。一个例子:

curl -k --user damien@email.com:password https://api.my.domain.com/v1/traveler/get

例如,这将返回一个旅行者列表。我需要“信任”证书,因为它无效。所以一开始在浏览器上调用会返回net::ERR_INSECURE_RESPONSE,所以我只是去 API URL 并添加异常,现在我不再有这个问题了。然后我必须添加基本身份验证,它似乎工作。让我们看看我的代码是什么,如果您发现任何错误,请告诉我,我正在关注使用外部 API 的本教程:http ://www.toptal.com/angular-js/a-step-by-step -guide-to-your-first-angularjs-app

应用程序.js:

angular.module('TravelerApp', [
    'TravelerApp.controllers',
    'TravelerApp.services'
]);

服务.js:

angular.module('TravelerApp.services', [])
.factory('TravelerAPIService', function($http) {
    var travelerAPI = {};

    $http.defaults.headers.common.Authorization = 'Basic ABC743HFEd...=';

    travelerAPI.getTravelers = function() {
        return $http({
            method: 'GET',
            url: 'https://api.my.domain.com/v1/traveler/get'
        });
    }

    return travelerAPI;
});

最后,controllers.js:

angular.module('TravelerApp.controllers', [])
.controller('travelersController', function($scope, TravelerAPIService) {
    $scope.travelersList = [];

    TravelerAPIService.getTravelers()
    .success(function(data) {
        console.log('SUCCESS');
        $scope.travelersList = data;
    })
    .error(function(data, status) {
        console.log('ERROR');
        $scope.data = data || "Request failed";
        $scope.status = status;
    });
});

错误状态码为0,错误数据为空字符串。

4

2 回答 2

4

精度:

我对 HTTP POST 查询有相同的行为。我确定 :

  • 没有在服务器上发出请求
  • 不发送查询是有角度的

最后我找到了答案:

因为我(可能还有你)在自签名的 httpS 服务器上发送。Chrome 将其标记为不安全。

我通过将地址放在浏览器上并手动接受证书来解决此问题。

可能相关:XMLHttpRequest to a HTTPS URL with a self-signed certificate

于 2014-05-06T11:39:32.170 回答
1

我建议使用受信任的 CA 签名 SSL 证书而不是自签名证书,这可以解决您的问题,因为大多数浏览器不接受 Google Chrome、Firefox 等自签名证书。

于 2018-01-12T05:14:12.467 回答