Ошибка 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
?
Ответы
Ответ 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-адресом). (В приведенном выше случае это, безусловно, случай неправильного сопоставления узлов)