Почему API Mendeley для загрузки файла PDF не возвращает ответ 303?

Я пытаюсь загрузить PDF-файл в моей библиотеке Mendeley, используя JavaScript-код пользователя и Mendeley API. Ответ API указывает на ошибку, но я могу использовать информацию в ответе для получения файла PDF. У меня вопрос: почему я получаю ответ 400 "Плохой запрос", а не ожидаемый ответ 303 "См. Другой ответ", как описано в руководстве разработчика Mendeley API для "загрузки файла"? Я бы предпочел использовать API правильным образом, а не обходным путем, который я опишу ниже. Мой вопрос похож на этот (но я получаю ответ 400, а не 404, как описано в этом вопросе. Кроме того, на этот вопрос не было дано никакого ответа, объясняющего, как получить ответ 303 от API).

Ниже приведен код javascript (внутри скрипта пользователя tampermonkey), который я использую для вызова API:

xmlhttpRequest({
    method: "GET",
    url: "https://api.mendeley.com/files/4xxxxxxx-cxxx-2xxx-6xxx-fxxxxxxxxxxx",
    headers: {'Authorization': 'Bearer xxxxxxtoken-number-redactedxxxxxxx'),
    onload: function(data) {
        alert("under onload: "+JSON.stringify(data));},
    onerror: function() {
       alert("under onerror");}
});

код дает следующий предупреждающий ответ:

under onload: {
  "readyState":4,
  "responseHeaders":
      "Connection: close
       Content-Type: application/xml
       Date: Sat, 23 Dec 2017 22:19:15 GMT
       Server: AmazonS3
       Transfer-Encoding: chunked
       x-amz-id-2: Exxxxxxxxxxxxxxx=x-amz-request-id: 4xxxxxxxxx",
   "finalUrl":"https://mendeley-files.s3.amazonaws.com/da/22/dxxxxxx?response-content-disposition=attachment%3Bfilename%3Dxxx&response-content-type=application%2Fpdf&AWSAccessKeyId=Axxxxx&Expires=1xxxxx&Signature=Dxxxxxxx%3D",
   "status":400,
   "statusText":"Bad Request"}

URL, предоставленный finalUrl это то, что я использую, чтобы загрузить предполагаемый файл PDF. Хотя этот подход работает, это не тот подход, который описан в руководстве Mendeley API, в котором говорится: "В случае успешного запроса сервер ответит" 303 Просмотреть другой ответ "вместе с заголовком Location". Опять же, мой вопрос: как я должен изменить свой код, чтобы правильно использовать API для получения ответа 303 и "заголовка местоположения"?

0 ответов

Другие вопросы по тегам