在 AngularJS 中访问 JSONP 请求的真实 URL
Posted
技术标签:
【中文标题】在 AngularJS 中访问 JSONP 请求的真实 URL【英文标题】:Access the Real URL for JSONP request in AngularJS 【发布时间】:2013-11-09 02:56:06 【问题描述】:这是使用$http
的 JSONP 函数进行 JSONP 调用的基本设置
var authenticatedUrl = authenticateUrl("http://example.com/getStuff&callback=JSON_CALLBACK");
return $http.jsonp(authenticatedUrl).then(function (response)
...
问题是,我的 HMAC 身份验证器正在使用 callback=JSON_CALLBACK
创建基于 URL 的哈希,然后当 Angular 发出实际请求时,URL 更改为将 angular.callbacks._0
作为回调参数,这使我的身份验证哈希无效。
如何访问将用于此 JSONP 请求的真实网址?
根据我的研究,拦截器似乎是解决这个问题的方法,但我似乎无法找到具有angular.callbacks._0
回调的 URL 的对象。
【问题讨论】:
愚蠢的问题,authenticate the url
是什么意思?
@charlietfl - HMAC 身份验证。它根据 URL 和密钥生成哈希字符串。
@charlietfl - 我编辑了问题以澄清我真正想要的(真正的请求 URL)。
【参考方案1】:
如果我理解正确,您使用的是 Hawk - Single URI Authentication 之类的东西;这是您获得一个必须附加到 url 的令牌,并且该令牌对该确切的 url 有效。
您遇到的问题不是角度本身,而是每个 jsonp 框架应该工作的方式。
我会建议分叉 JSONP 以添加此行为或手动执行 JSONP。
var i = 0;
function call_endpoint(callback)
i++;
var url = "http://example.com/getStuff&callback=callback_" + i;
//append the token here, or call your endpoints to fetch the endpoint.
window["callback_" + i] = function (data)
delete window["callback_" + i];
callback(data);
;
script = document.createElement('script');
script.src = url;
var target = document.getElementsByTagName('script')[0] || document.head;
target.parentNode.insertBefore(script, target);
【讨论】:
我觉得应该有一些东西可以公开“转换后的”url(带有angular.callbacks._0
的那个)。我在想类似于 jquery 的 ajax 的东西,有一个“beforeSend”选项,我可以在其中访问 url。因为转换后的 url 没有公开(我可以找到),所以无法创建正确的身份验证令牌。以上是关于在 AngularJS 中访问 JSONP 请求的真实 URL的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS 中的 JSONP 请求不像 jQuery 那样工作
angularjs jsonp跨域请求网络看到了请求值,但是一直走error