Почему 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 и "заголовка местоположения"?