【发布时间】:2014-03-04 18:02:06
【问题描述】:
我一直在尝试访问我的 Angular 应用程序中的 sqwiggle API,并正在使用 Postman 对其进行测试。一切似乎都很好。我定义了一个 Basic Auth 标头,向消息端点发出 GET 请求,我得到了很好的响应。这些是请求标头(来自 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
鉴于 Postman 使用 JS 从 API 获取数据这一事实,AngularJS 中也应该可以,或者我在这里遗漏了什么?为什么 Angular 在 OPTIONS 请求中转换 GET 并且为什么不添加 Authorization 标头?
感谢您的帮助
【问题讨论】:
-
stackoverflow.com/questions/16021442/… 建议 Postman 具有跨域访问权限,因为它是 Chrome 应用程序。我的 AngularJS 应用程序没有。这可以解释为什么这不起作用。
-
那么如果我想直接从 Angualr JS 调用外部 API 有什么解决方案。
标签: javascript angularjs http web postman