Подтвердить что ты не робот

Ошибка ECONNREFUSED с node.js, которая не встречается у других клиентов

Я делаю запрос http с клиентом node.js, и я получаю ошибку ECONNREFUSED. Когда я делаю то, что похоже на тот же запрос с моим браузером или curl(1), он работает просто отлично

Здесь запрос node:

var options = {
  host: 'localhost',
  port: 8080,
  path: '/explorers/1.0/agegroup',
  method: 'GET'
};

var req = http.request(options, function(res) {
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.on('error', function(e) {
  console.log(e);
});

req.end();

И это дает мне ошибку:

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

Но когда я делаю тот же запрос с другим клиентом (curl в этом случае):

$ curl http://localhost:8080/explorers/1.0/agegroup
{... response JSON ...}

Другие примечания:

  • Я попытался изменить хост на www.google.com и порт на 80, а node успешно завершил соединение

  • Я попытался изменить порт сервера, и я все еще могу делать запросы со всеми клиентами, но node.js(который по-прежнему получает ECONNREFUSED)

  • Сервер, к которому я подключаюсь, это CherryPy WSGI Server. Когда я пытаюсь подключиться к серверу node на localhost: 8080, он отлично работает, что заставляет меня думать о проблеме с сервером, за исключением того, что другие клиенты работают с сервером CherryPy.

  • Я пробовал использовать те же заголовки, что и мой браузер, но это не работает, и похоже, проблема на уровне TCP в любом случае, поэтому заголовки HTTP не должны быть проблемой.

Что случилось с моим запросом node?

4b9b3361

Ответ 1

Я думаю, иногда вам просто нужно отойти от проблемы...

Я нашел решение, но, похоже, оно не отвечает на вопрос, и мне это не очень нравится.

Я изменил конфигурацию сервера CherryPy для обслуживания 127.0.0.1 вместо localhost, и клиент node начал работать.

Ответ 2

Я не согласен с несогласием Сомана.

Я вытаскиваю свои волосы на этом, но да, конечно, nodejs v0.10.24 и v0.10.25 отказываются подключаться к серверу разработки PHP 5.4 (сервер командной строки PHP) при вызове как:

php -S localhost:8088

Браузер, завиток, все остальное прекрасно соединяется. Тем не менее, достаточно уверенно, изменив адрес привязки:

php -S 127.0.0.1:8088 

И nodejs ', используя xmlrpc, соединяется просто отлично. Это произошло в Mac OS X 10.9.1. Очень странно.

Ответ 3

Я столкнулся с одной и той же проблемой.

Обратите внимание, что Windows 7 по умолчанию не включает запись для localhost в C:\Windows\System32\drivers\etc\hosts (ссылка на википедию)

Добавление записи для localhost не влияет на Node.js(0.10.25), поскольку он явно полностью пропускает файл hosts.

Используйте 127.0.0.1 вместо локального адреса, это будет работать, как всегда, в вашем файле hosts.

Ответ 4

У меня была та же проблема. Я смог разрешить его, заменив localhost или 127.0.0.1 на свой IP-адрес системы (используйте ifconfig для ip-адреса).

Ответ 5

Я столкнулся с той же проблемой, когда я обращался к URL-адресу третьей стороны. Я попытался использовать dns (subdomain.domain.com) и ip (XXX.XXX.XXX.XXX), но это не сработало.

После некоторой битвы, позже я понял, что это проблема на сервере (subdomain.domain.com), который не реагирует и ушел.

Я не согласен, что это проблема с localhost/127.0.0.1 (или доменным именем и IP-адресом). (В приведенном выше случае это, безусловно, случай неправильного сопоставления узлов)