使用 .getJSON 获取 Play 商店应用详细信息时出现跨域阻止请求 [CORS] 错误
Posted
技术标签:
【中文标题】使用 .getJSON 获取 Play 商店应用详细信息时出现跨域阻止请求 [CORS] 错误【英文标题】:Getting Cross Origin Block Request [CORS] error when using .getJSON to get Play Store App Details 【发布时间】:2014-05-28 00:21:28 【问题描述】:所以基本上我使用 42matters.com APP market API 从 google play store 获取应用程序详细信息或信息,一切正常,我收到 JSON 响应,但是当我周末假期后回到办公室时,这个相当奇怪的错误来了,没有返回任何东西。
我使用过 $.getJSON 函数,例如:
var packageID = 'com.whatsapp';
$.getJSON('https://42matters.com/api/1/apps/lookup.json?p='+packageID+'&access_token=accesstoken1234')
.done(function(appDetails)
$('#logo').html(JSON.stringify(appDetails));
);
如前所述,这是返回数据,我能够相应地更改所有内容,但现在它无缘无故地给我这个错误
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://42matters.com/api/1/apps/lookup.json?p=com.whatsapp&access_token=accesstoken1234. This can be fixed by moving the resource to the same domain or enabling CORS
我已经使用 php 启用了 CORS,但没有发生任何事情,试图更改 apache 的 conf 文件以在其中启用 CORS,但服务不会因此而重新启动,所以我被卡住了。
还有一件事,当我在浏览器中手动输入上述链接时,它确实给出了预期的结果。请帮我解决它
【问题讨论】:
【参考方案1】:CORS 在浏览器端被阻止,不允许 AJAX 从另一个域请求数据。您应该联系 42matters.com 团队为您打开 crossdomain.xml,例如 CORS jQuery AJAX request 或 Can someone post a well formed crossdomain.xml sample?
或者 AJAX 跨域的解决方法是 JSONP:jQuery AJAX cross domain,但 API 应该支持这种请求。
最后一点是不要使用AJAX从其他来源收集数据,如果是移动平台,它应该有原生的HTTP请求对象来做到这一点
【讨论】:
谢谢,解决方法对我来说非常有效,给了我预期的结果,是的,api确实支持这种请求......:p【参考方案2】:我知道这是旧技术,但我们中的一些人仍然需要处理这个问题。
如果您使用的是 IIS6 Web 服务器:
打开 Internet 信息服务 (IIS) 管理器 右键单击要为其启用 CORS 的站点,然后转到“属性” 切换到 HTTP 标头选项卡 在自定义 HTTP 标头部分中,单击添加 输入 Access-Control-Allow-Origin 作为标题名称 输入 * 作为标题值 点击确定两次IIS7 - 将此添加到您的 web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
【讨论】:
同样的customHeader可以应用到IIS Express【参考方案3】:我们可以通过在我们的html文件中放置base标签来解决这个问题。
<head>
<base href="http://www.otherdomain.com/xyz/">
</head>
【讨论】:
以上是关于使用 .getJSON 获取 Play 商店应用详细信息时出现跨域阻止请求 [CORS] 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何通过用于下载应用程序的 Google Play 商店帐户获取 Firebase 用户?
在 Flutter 中从 Play 商店获取产品时应用内购买崩溃