Задать вопрос
@thisuser

Как отловить в коде что IP заблокирован?

День добрый..
Столкнулся в процессе реализации несложной задачи на nodejs с тем, что иногда не получаю никакого ответа от сервера при запросе через request.

Пришёл к выводу, что такое может быть в случаи если ip моего сервера попал в бан. (Может и неправильный вывод, но вероятный, так как ip меняются и они не очень иногда "качественные").

Вот например простенький запрос:

var options = {
	url: url,
	encoding: null
};

request.get(options, function (err, res) {
// сюда не попадает уже.. ;) виснет на запросе.
	if (err) {
	    console.log('не ok');
	} else {
	    console.log('ok');
	}
});


Понятно, что в случаи ответа типа 200, всё хорошо.. - иначе ошибка.
Но в моём случаи, при обращении с некоторых IP ничего не происходит. Как это можно лучше отловить?
Благодарю.
  • Вопрос задан
  • 57 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Таймаут реквесту поставить. Если ответ не пришел до истечения таймаута, то "не ок"
Не знаю возможности модуля request и посмотреть нормально не могу, с телефона не удобно, поэтому могу предложить только универсальное, но не очень верное идеологически решение:

var options = {
  url: url,
  encoding: null,
  timeout: 60*1000
};

function req(opts, cb){
  var isTimeout = false;
  setTimeout( ()=>{
     if( isTimeout) return;
     isTimeout = true;
     cb("time is out", {});
  }, opts.timeout);
  request.get(opts, function (err, res) {
  // сюда не попадает уже.. ;) виснет на запросе.
    if( isTimeout ) return;
    isTimeout = true;
    cb(err, res);
  });
)

// выполняем запрос с таймаутом в 60 сек.
req(options, function(err, res){
    if (err) {
        console.log('не ok');
    } else {
        console.log('ok');
    }
});


PS: правильным решением будет делать так как это сделано в Вашем примере, но добавив в options значение таймаута. Поищите в офдоке модуля request как это делать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@thisuser Автор вопроса
Благодарю.. да нашёл про таймаут в request - оно самое.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы