2014-02-07 4 views
4

Я пытался получить доступ к sqwiggle API внутри моего приложения Angular и тестировал его с помощью Postman. Кажется, все работает нормально. Я определяю заголовок Basic Auth, делаю запрос GET на конечную точку сообщения, и получаю приятный ответ. Эти заголовки запроса (от Postman):AngularJS и внешний API - заставить его работать как PostMan

Request URL:https://api.sqwiggle.com/messages 
Request Method:GET 
Status Code:200 OK 
Request Headersview source 
Accept:*/* 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8,nl;q=0.6 
Authorization:Basic [secret] 
Cache-Control:no-cache 
Connection:keep-alive 
Host:api.sqwiggle.com 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.70 Safari/537.36 

Теперь в моем AngularJS приложение, я хочу сделать то же самое:

$http.get('https://api.sqwiggle.com/messages', { 
    headers: { 
     Authorization: 'Basic [secret]' 
    } 
}).success(function(e) { 
    alert(e); 
}); 

Но это приводит следующие заголовки запроса:

Request URL:https://api.sqwiggle.com/messages 
Request Method:OPTIONS 
Status Code:404 Not Found 
Request Headersview source 
Accept:*/* 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8,nl;q=0.6 
Access-Control-Request-Headers:accept, authorization 
Access-Control-Request-Method:GET 
Connection:keep-alive 
Host:api.sqwiggle.com 
Origin:http://localhost:8888 
Referer:http://localhost:8888/ 
User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 

Учитывая тот факт, что почтальон использует JS для получения данных из API, это должно быть возможно и в AngularJS, или я что-то пропустил здесь? Почему Angular преобразует GET в запрос OPTIONS и почему он не добавляет заголовок авторизации?

Спасибо за вашу помощь

+0

http://stackoverflow.com/questions/16021442/how-postman-send-requests-ajax-same- политика происхождения предполагает, что почтальон имеет доступ к перекрестному домену, потому что это приложение Chrome. У моего приложения AngularJS нет. Это объясняет, почему это не работает. – Kukiwon

+0

Итак, каково решение, если я хочу вызвать внешний API напрямую из Angualr JS. – Mukun

ответ

1

попробовать что-то вроде этого, вместо того, чтобы использовать $http.get

$http({ 
    method: "get", 
    url: "https://api.sqwiggle.com/messages", 
    headers: { 
     'Authorization' : 'Basic secret' 
    } 
}).success(function(data) { 
    console.log(data); 
}); 
Смежные вопросы