Почему https-модуль Node возвращает 301, когда ресурс фактически не был перемещен? - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь выполнить простой HTTPS-запрос к внешнему API с помощью собственного модуля https узла.

Используя устаревший модуль request, я могу успешно получить ответ JSON, поэтому я Я знаю, что конечная точка API верна и ресурс существует.

Итак, моя конфигурация с использованием модуля https должна быть неправильной, но я пытаюсь понять, почему он возвращает 301 именно.

Можно ли с помощью приведенного ниже фрагмента кода определить проблему?

const https = require("https");

const options = {
    hostname: 'lingq.com',
    port: 443,
    path: '/api/languages',
    method: 'GET',
    headers: { 'Authorization': 'Token xxxxxxxxxxx' }
};

https.get(options, (res) => {
    console.log('statusCode:', res.statusCode);
    console.log('headers:', res.headers);  
}).on('error', (e) => {
    console.error(e);
});

1 Ответ

2 голосов
/ 02 апреля 2020

Это ваш целевой сервер lingq.com, который возвращает 301, а не ваш node.js сервер.

Заголовок location, который возвращает цель, таков:

location: 'https://www.lingq.com/api/languages'

получается, что он хочет, чтобы вы использовали www.lingq.com в качестве хоста, а не lingq.com.

Ваш Specifi c Вопросы

Использование модуль устаревших запросов, я могу успешно получить ответ JSON, поэтому я знаю, что конечная точка API верна и ресурс существует.

В модуле request, followRedirect опция по умолчанию true, поэтому она будет автоматически следовать перенаправлениям 3xx.

Итак, моя конфигурация с использованием модуля https должна быть неправильной, но я пытаюсь понять, почему он возвращает 301 именно.

Поскольку он хочет, чтобы вы использовали www.lingq.com в качестве хоста, а не lingq.com.

Возможно ли это, взглянув на фрагмент кода ниже, чтобы определить проблему ?

Нет. Мне пришлось запустить код и увидеть возвращенные заголовки, чтобы увидеть другой хост в заголовке местоположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...