首页 > 解决方案 > Microsoft Academic Search API 停止工作

问题描述

我成功地使用了Microsoft Academic Search API,但由于某种原因,我未更改的代码在大约 2 周前停止工作,不知道为什么。我将其归结为一些 CORS 问题:预检OPTIONS请求导致 404 并直接POST使用mode: 'no-cors'阻止Ocp-Apim-Subscription-Key发送自定义 API 密钥标头 (),导致 401。我从未查看过网络开发选项卡,而一切都是仍在工作,也许 OPTIONS 请求在两周前仍然有效?还是我这边的 Firefox 更新?

我已经尝试过 GET 和 POST 请求,我已经尝试过 axios 和 fetch API,我已经尝试过 no-cors 和 cors 请求。除非手动将 API 密钥添加到标头,否则没有任何效果。

// simple no-cors request
fetch(
    'https://api.labs.cognitive.microsoft.com/academic/v1.0/evaluate',
    {
        method: 'POST',
        mode: 'no-cors', // I've tried removing this line for CORS request
        headers: new Headers(
           { "Content-Type": "application/x-www-form-urlencoded", "Ocp-Apim-Subscription-Key":"[actual key not needed for replication]" }
        ),
        body: "expr=Id%3D2101196984&attributes=Id"
    }
).then( response => { console.log(response);} )
.catch(err => console.log(err))

看看Ocp-Apim-Subscription-Key标题是如何丢失的。经过一些研究,我意识到这是由于no-cors模式(见这里)。简单的 POST 标头:

Host: api.labs.cognitive.microsoft.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Origin: null
Content-Length: 34
DNT: 1
Connection: keep-alive

此请求导致 401,权限被拒绝。注意我在示例中使用了一个虚拟密钥,但是我的真实密钥也遇到了同样的问题,这一定是由于遗漏了,Ocp-Apim-Subscription-Key因为当我在手动添加密钥头后重新发送请求时,响应工作得很好(使用开发人员工具栏 Network=>Headers 选项卡中的 Firefox 的“编辑和重新发送”功能并手动添加一行Ocp-Apim-Subscription-Key: [actual key])。

但是,当我使用 CORS 请求时,服务器无法真正处理以下 OPTIONS 预检请求,返回 404。

发送与上述相同的 fetch-request 时出现请求 OPTIONS 标头,只是没有mode: 'no-cors'

Host: api.labs.cognitive.microsoft.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Access-Control-Request-Method: POST
Access-Control-Request-Headers: ocp-apim-subscription-key
Origin: null
DNT: 1
Connection: keep-alive

响应头:

HTTP/1.1 404 Resource Not Found
Content-Length: 89
Content-Type: application/json
Date: Mon, 28 Oct 2019 10:59:03 GMT

还有其他人遇到这个问题吗?有什么我可以做的吗,或者这似乎是微软方面的服务器问题?

标签: corsaxiosfetch-api

解决方案


我很高兴地说 CORS 问题应该最终得到解决。问题本身是内部迁移期间配置错误的结果。

对延迟解决表示歉意!


推荐阅读