AngularJS和一个外部API - 让它像PostMan一样工作
问题描述:
我一直试图访问我的Angular应用程序中的sqwiggle API,并使用Postman进行测试。所有似乎都很好。我定义了一个Basic Auth头文件,对消息端点执行GET请求,并得到一个很好的响应。这些是请求头(从邮差):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会在OPTIONS请求中转换GET,为什么不添加授权标头?
感谢您的帮助
答
尝试这样的事情,而不是使用$http.get
$http({
method: "get",
url: "https://api.sqwiggle.com/messages",
headers: {
'Authorization' : 'Basic secret'
}
}).success(function(data) {
console.log(data);
});
http://stackoverflow.com/questions/16021442/how-postman-send-requests-ajax-same-起源政策建议Postman具有跨域访问权限,因为它是Chrome应用程序。我的AngularJS应用程序没有。这将解释为什么这不起作用。 – Kukiwon
那么,如果我想直接从Angualr JS调用外部API,那么解决方案是什么? – Mukun