4
我一直試圖訪問我的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://stackoverflow.com/questions/16021442/how-postman-send-requests-ajax-same-起源政策建議Postman具有跨域訪問權限,因爲它是Chrome應用程序。我的AngularJS應用程序沒有。這將解釋爲什麼這不起作用。 – Kukiwon
那麼,如果我想直接從Angualr JS調用外部API,那麼解決方案是什麼? – Mukun