API академического поиска Microsoft перестал работать - PullRequest
1 голос
/ 28 октября 2019

Я успешно использовал Microsoft Academic Search API , но по какой-то причине мой неизмененный код перестал работать примерно 2 недели назад, не знаю почему. Я прибил это к некоторой проблеме CORS: предварительные OPTIONS запросы приводят к 404, а прямое POST с mode: 'no-cors' предотвращает отправку настраиваемого заголовка API-ключа (Ocp-Apim-Subscription-Key), что приводит к 401. Я 'Вы никогда не заглядывали в вкладку «Сети», пока все еще работало, может быть, запросы OPTIONS работали две недели назад? Или это может быть обновление Firefox на моей стороне?

Я пробовал запросы GET и POST, я пробовал как axios, так и 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, потому что , когда я повторно отправляю запрос после добавления вручнуюkey-header, ответ работает просто отлично (используя функцию Firefox «Редактировать и повторно отправить» на панели инструментов «Сеть» => вкладка «Заголовки» и вручную добавляя строку Ocp-Apim-Subscription-Key: [actual key]).

Однако, когда яПри использовании запроса CORS следующий запрос предварительной проверки OPTIONS не может быть обработан сервером, возвращая 404.

Заголовок 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

Кто-нибудь еще испытывает эту проблему? Могу ли я что-нибудь сделать или это проблема сервера на стороне Microsoft?

...