#node.js #fetch
#node.js #выборка
Вопрос:
Среда: Node.js , Экспресс, выборка узлов
Вопрос: Я пытаюсь использовать выборку узла, чтобы определить, активен ли веб-сайт. Это отлично работает для https. Однако, когда я тестирую http, он всегда возвращается как ok = true
, status = 200
amp; statusText = OK
. Даже когда я использую случайные символы и буквы для URL-адреса, такие как qwerweqr12341243124.net это всегда возвращается одним и тем же путем. Есть ли лучший способ использовать выборку, чтобы определить, активна ли http-версия? Требуется ли другой инструмент?
Пример: Приведенный ниже упрощенный пример проверяет, есть ли активная http
и https
версия веб-сайта.
const fetch = require('node-fetch');
function checkIfWebsiteExists(website) {
let httpVersion = `http://${ website }`;
let httpsVersion = `https://${ website }`;
fetch(httpVersion)
.then(function(response) {
console.log('http ok', response.ok);
console.log('http status', response.status);
console.log('http statusText', response.statusText);
})
.catch(function(err) {
console.log(err);
});
fetch(httpsVersion)
.then(function(response) {
console.log('https ok', response.ok);
console.log('https status', response.status);
console.log('https statusText', response.statusText);
})
.catch(function(err) {
console.log(err);
});
}
Ответ №1:
Итак, выборка узла по умолчанию будет автоматически следовать перенаправлениям. Итак, если http-версия сайта выполняет перенаправление на https-версию сайта, то node-fetch автоматически последует за этим перенаправлением и в конечном итоге предоставит вам содержимое с https-версии сайта (не сообщая вам об этом).
Если вы не хотите автоматически следовать перенаправлению, чтобы вы могли видеть реальный статус http, возвращаемый с http
версии сайта, добавьте эту опцию в свой вызов node-fetch:
fetch(httpVersion, { redirect: 'manual' })
Затем, когда вы запускаете свой код на сайте, который выполняет автоматическое перенаправление, например www.stackoverflow.com
, вы получите статус 301 для http-версии запроса.
http ok false
http status 301
http statusText Moved Permanently
Комментарии:
1. Привет, jfriend00, интересно, что помогает. Но одна проблема, с которой я сталкиваюсь, заключается в том, что даже URL-адрес случайного символа, такой как fdsaf54rsafrsadfasfd.net возвращается
ok = true
,status = 200
amp;statusText = OK
когда я тестирую http. Есть ли лучший тест?2. @myNewAccount — это полностью зависит от того, что сервер сайта делает для несуществующего URL. Некоторые сайты, полностью предназначенные для браузера, могут возвращать 200 и веб-страницу для несуществующего URL. Предоставьте пример URL-адреса, и я могу взглянуть на него.
3. Я тестирую введенные пользователем URL-адреса. Вот почему я тестировал сумасшедшие примеры, такие как, dfyuifioads123fsadfsadfsadf4e.com . Но
http
независимо от того, что я пытаюсь, они всегда возвращаются хорошо. Я проверяю, есть ли заголовок, который указывает, что сайт не является реальным, но я ничего не могу найти. Есть ли волшебная палочка для такого рода вещей?4. @myNewAccount — это на объекте ошибки, отправленном
.catch()
. Возвращаемое обещаниеfetch()
отклоняется.5. Да, это ПЛОХОЙ ПРОВАЙДЕР. Позор вам, провайдер. Прекратите это делать. Они пытаются продавать рекламу по неверному URL. Вы можете сменить свой DNS-сервер на общедоступный DNS-сервер (например, Google или один из других бесплатных, общедоступных и хороших), который этого не сделает.