1

我正在尝试使用带有 API 密钥的聚会 API,但我被 CORS 阻止了。

我正在使用示例 meetup 给出:https://api.meetup.com/2/events?key=mykey&group_urlname=ny-tech&sign=true,用我的 API 密钥替换 API 密钥。这个例子来自这里。

这是我的代码(我拿出我的钥匙并用 <key> 替换它):

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<button id="find">find</button>
 <script>
        $("#find").click( function(){
          $.getJSON("https://api.meetup.com/2/events?key=<key>&group_urlname=ny-tech&sign=true", function(data){
            console.log(data);
          });
        });
</script>

我收到这些错误:

从源“ http://127.0.0.1:5500 ”访问“ https://api.meetup.com/2/events?key=aKey&group_urlname=ny-tech&sign=true ”的 XMLHttpRequest已被 CORS 策略阻止:否请求的资源上存在“Access-Control-Allow-Origin”标头。test.html:18

跨域读取阻止 (CORB) 阻止 了 MIME 类型 application/json的跨域响应https://api.meetup.com/2/events?key=aKey&group_urlname=ny-tech&sign=true 。有关详细信息,请参阅 https://www.chromestatus.com/feature/5629709824032768 。

我是 API 新手,我对这里发生的事情感到困惑。我知道meetup API 上的一些API 请求需要OAuth,我仍在努力掌握。但是,由于这是文档中用于 API 密钥的示例,而不是 OAuth,因此我希望它可以与我的 API 密钥一起使用。当我简单地将它粘贴到浏览器中时,该请求有效,但在我使用 jQuery 抓取它时无效。

文档中有几个地方谈到了 CORS: 这里的文档说

“您必须使用 OAuth 才能从 CORS 中受益。”

这里

虽然我们支持对第一方应用程序进行基于密钥的身份验证,但我们要求对代表其他用户执行操作的第三方应用程序进行 OAuth。

我不代表其他用户采取行动。但我是第三方应用程序吗?什么是第一方应用程序?在什么情况下我提出的请求会起作用?

4

1 回答 1

2

看起来 Meetup 只允许带有通过 OAuth 身份验证的请求的 CORS –阅读此问题

一种方法是使用jsonP。获得生成的 API 签名 URL 后,您可以将其添加?callback=?为第一个参数,它将为您工作。

下面是一个例子

$("#find").click(function() {
  $.getJSON("https://api.meetup.com/2/events?callback=?&offset=0&format=json&limited_events=False&group_urlname=ny-tech&page=200&fields=&order=time&desc=false&status=upcoming&sig_id=SIGID&sig=SIG", function(data) {
    console.log(data);
  }).fail(function(jqxhr, textStatus, error) {
    console.log("error", textStatus);
  })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<button id="find">find</button>

于 2019-01-29T18:46:49.297 回答