Ошибка вызова API AngularJS с $ http GET

Я пытаюсь создать простое приложение с использованием Angular, которое будет использовать мой API. Я использую виртуальную машину для запуска кода и получаю доступ к ней на своем компьютере, поэтому для вызова API с моей машины я могу использовать cURL или любой другой HTTP-клиент, и все работает. Пример:

curl -k --user [email protected]: пароль https://api.my.domain.com/v1/traveler/get

И это, например, вернет список путешественников. Мне нужно «доверять» сертификату, так как он недействителен. Итак, в браузере сначала вызов вернет net::ERR_INSECURE_RESPONSE, поэтому я просто перехожу к URL-адресу API и добавляю исключение, и теперь у меня больше нет этой проблемы. Затем мне пришлось добавить базовую аутентификацию, и, похоже, это сработало. Давайте посмотрим, какой у меня код, и дайте мне знать, если вы видите что-то не так. Я следую этому руководству, использующему внешний API: http://www.toptal.com/angular-js/a-пошаговоеруководство-руководствоквашемупервому-angularjs-app

app.js:

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

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, а данные об ошибке - пустая строка.


person Dachmt    schedule 26.03.2014    source источник
comment
Я получаю аналогичный результат, когда убиваю HTTP-сервер и делаю запрос. Может быть связано: stackoverflow.com/questions/2000609/jquery- ajax-status-code-0   -  person gak    schedule 09.04.2014


Ответы (2)


Точность:

У меня такое же поведение с запросом HTTP POST. Я уверен :

  • на сервере не было сделано никаких запросов
  • это angular, который не отправляет запрос

И вот наконец я нахожу ответ:

Поскольку я (и, вероятно, вы) отправляю на самоподписанный сервер httpS. Chrome отметит это как небезопасное.

Я исправляю эту проблему, указав адрес в моем браузере и вручную принимаю сертификат.

Вероятно, связано: XMLHttpRequest к URL-адресу HTTPS с само- подписанный сертификат

person sciencefan    schedule 06.05.2014

Я бы предложил использовать доверенный сертификат CA, подписанный SSL, а не самозаверяющие сертификаты, которые решат вашу проблему, поскольку большинство браузеров не принимают самоподписанные сертификаты, такие как Google Chrome, Firefox и т. Д.

person Akash Patel    schedule 12.01.2018