使用 .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 商店获取产品时应用内购买崩溃

Firebase 动态链接 - 从 Play 商店安装应用程序后无法在 android 中获取 Url

抓取Google Play商店应用

如何从 Play 商店 API 获取数据

如果隐藏Google Play商店,则Google Play服务也不可用