Node: http.get devuelve el error "getaddrinfo ENOTFOUND"

Creado en 25 feb. 2016  ·  73Comentarios  ·  Fuente: nodejs/node

Hola a todos,
Estoy tratando de solucionar el siguiente problema desde hace cinco días.
cuando estoy haciendo un

  • http.get("http://url/", cb);

o

  • http.get(opciones, cb);

regresa este error:

HTTP 5021: SOCKET ERROR: getaddrinfo ENOTFOUND _host_ _host_:80 Error: getaddrinfo ENOTFOUND _url_ _url_:80
    at errnoException (dns.js:26:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:77:26)
Got error: getaddrinfo ENOTFOUND _host_ _host_:80
NET 5021: destroy undefined
NET 5021: destroy
NET 5021: close
NET 5021: close handle
NET 5021: destroy
NET 5021: already destroyed, fire error callbacks
NET 5021: emit close
HTTP 5021: CLIENT socket onClose
HTTP 5021: removeSocket _host_:80: destroyed: true
HTTP 5021: HTTP socket close

Al realizar una solicitud https a google.com:
Got error: connect ENETUNREACH 2a00:1450:400a:806::1014:443 - Local (:::0)

Definitivamente puedo decir que NO es un problema de DNS o PROXY.

Lo que testeé hasta ahora:

  • archivo de hosts cambiado, por lo que no se requiere búsqueda de dns
  • cambiado resolv.conf para usar otros servidores DNS
  • las solicitudes curl y wget funcionan
  • ping al host de destino funciona
  • sistema completo reinstalado
  • mismo código node.js funciona en un sistema raspbian

código de ejemplo de node.js:

var http = require('http');
var options = {
  host: '_host_',
  port: 80,
  path: '/'
};

http.get(options, function(res) {
  console.log("Got response: " + res.statusCode);

  res.on("data", function(chunk) {
    console.log("BODY: " + chunk);
  });
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});
  • Versión : v5.5.0
  • Plataforma : Linux buildroot 4.1.15 armv6l (raspberrypi)
dns http

Comentario más útil

y yo estaba recibiendo

Error: getaddrinfo ENOTFOUND undefined undefined:80

¡NO ES MUY ÚTIL EN ABSOLUTO!11

INDEFINIDO NO SE ENCUENTRA, SÍ, SEGURO

MÁS COMO "INDEFINIDO NO ES UNA FUNCIÓN"

¡¡¡NO SE PUEDE ARGUMENTAR ESO!!!1

¿ES UN NÚMERO DE LÍNEA AL FINAL O QUÉ?

¿CÓMO SE SUPONE QUE DEBO DEPURAR ESTO?

¿ES MUY DIFÍCIL PARA SUS DESARROLLADORES INCLUIR UN MENSAJE SIGNIFICATIVO LEGIBLE PARA EL SER HUMANO?

¿ESTÁS ESCRIBIENDO ESTO PARA MÁQUINAS? O PARA HUMANOS?

Todos 73 comentarios

Para que quede claro, no estás _realmente_ haciendo http.get("http://url/", cb); sino http.get("http://www.google.com/", cb); o algún otro sitio web que exista, ¿verdad?

Además, si pudiera probar versiones anteriores de Node y ver si funcionan para usted, sería muy apreciado.

Si. _url_ y _host_ son solo marcadores de posición.

getaddrinfo es, por definición, un problema de DNS. ¿Funciona dig host o nslookup host ? ¿Funciona dns.lookup(host, console.log) ? ¿Puedes publicar el dominio?

dig no está disponible para buildroot. nslookup está funcionando y me devuelve la dirección IP. Probé muchos dominios diferentes (ej. www.hackaday.com)

y sí, dns.lookup(host, console.log) funciona y la dirección IP devuelta es correcta.

¿Qué imprime dns.lookup(host, {hints: dns.ADDRCONFIG|dns.V4MAPPED}, console.log) ?

{ [Error: getaddrinfo ENOTFOUND host]
  code: 'ENOTFOUND',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'host' }

¿Tengo razón en que funciona con {hints:0} ? ¿Qué sucede con {hints:dns.ADDRCONFIG} y {hints:dns.V4MAPPED} ?

'x.x.x.x' 4

'x.x.x.x' 4

{ [Error: getaddrinfo ENOTFOUND host]
  code: 'ENOTFOUND',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'host' }

xxxx es la IP correcta devuelta.

Gracias. No mencionaste qué versión de glibc tienes instalada, pero probablemente tengas un error en esa biblioteca. www.hackaday.com es un buen ejemplo: es un CNAME para hackaday.com y las versiones anteriores de glibc no manejaban AI_V4MAPPED para tales registros.

Como solución alternativa, pruebe http.get({ family: 4, ... }, cb) , que le dice al nodo que no use AI_V4MAPPED. Utilice { family: 6 } si desea una conexión IPv6.

Estoy usando uclibc 1.0.12. Por el momento estoy compilando buildroot con glibc estándar. Te diré si algo ha cambiado.
Establecer la familia en 4 está funcionando. 6 me está devolviendo los errores conocidos.

Entonces, la solución actual será esta:

var options = {
  host: '_host_',
  family: 4,
  port: 80,
  path: '/'
};
http.get(options, cb);

No puedo compilar buildroot con glibc estándar. Hay demasiados errores.
Entonces, por ahora, la solución anterior será la mejor solución para mí.

Me alegro de que te esté funcionando ahora. Cierro el tema.

FYI, esto fue causado por uClibc-ng que no maneja correctamente AI_V4MAPPED y ahora está solucionado:
http://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=3c1457161e5206c2d576ab25d350a139511c096d

Hola Pedro,

Acabo de ver tu mensaje sobre el "error" de uClibc. ¡¡¡¡¡Muchas gracias!!!!! Será
Intenta reconstruirlo y probarlo mañana.

Saludos y buen fin de semana,
Miguel

2016-03-11 13:00 GMT+01:00 Peter Korsgaard [email protected] :

FYI, esto fue causado por uClibc-ng que no maneja AI_V4MAPPED correctamente y
ahora está arreglado:

http://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=3c1457161e5206c2d576ab25d350a139511c096d


Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/nodejs/node/issues/5436#issuecomment-195339568 .

Eres bienvenido. Tenga en cuenta que no ha habido ninguna nueva versión de uclibc-ng con esta solución y aún no se ha integrado en Buildroot. Lo más probable es que lo haga este fin de semana.

Lo noté antes y pensé en incluir la versión rev actual. Pero
ahora, esperaré hasta que lancen la nueva versión oficial. Muchas gracias
de nuevo. Saludos desde Liechtenstein.

2016-03-11 21:02 GMT+01:00 Peter Korsgaard [email protected] :

Eres bienvenido. Tenga en cuenta que no ha habido ningún nuevo lanzamiento de uclibc-ng
con esta solución y aún no se ha integrado en Buildroot. voy a
Lo más probable es que lo haga este fin de semana.


Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/nodejs/node/issues/5436#issuecomment-195524202 .

/cc @indutny : ¿quizás lib/dns.js solo debería configurar AI_V4MAPPED cuando la familia == 6?

Acabo de descargar el buildroot más nuevo y lo compilé. mi problema es ahora
reparado. De nuevo, ¡muchas gracias!
uclibc versión 1.0.13 ahora solucionó el problema de http.get.

2016-03-11 21:02 GMT+01:00 Peter Korsgaard [email protected] :

Eres bienvenido. Tenga en cuenta que no ha habido ningún nuevo lanzamiento de uclibc-ng
con esta solución y aún no se ha integrado en Buildroot. voy a
Lo más probable es que lo haga este fin de semana.


Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/nodejs/node/issues/5436#issuecomment-195524202 .

¿En qué versiones de nodo se incluyó esta solución?

solución no funciona para mí. Nodo v6.5.0, MacOS 10.11.6

Error: getaddrinfo ENOTFOUND http://google.com http://google.com:80
    at errnoException (dns.js:28:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)

Está buscando ' http://google.com/ ' cuando debería ser solo 'google.com'.

El mismo problema que @SoundBot , pero está bien local, en algún momento ocurre en la ventana acoplable.

originalError:
{ Error: getaddrinfo ENOTFOUND xxx.s3-ap-southeast-1.amazonaws.com xxx.s3-ap-southeast-1.amazonaws.com:443
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
message: 'getaddrinfo ENOTFOUND xxx.s3-ap-southeast-1.amazonaws.com xxx.s3-ap-southeast-1.amazonaws.com:443',
code: 'NetworkingError',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'xxx.s3-ap-southeast-1.amazonaws.com',
host: 'xxx.s3-ap-southeast-1.amazonaws.com',
port: 443,
region: 'ap-southeast-1',
retryable: true,
 time: 2016-11-18T04:29:58.603Z }

¿Algún organismo ha elaborado la resolución final?

@denghuiquan , ¿intentó configurar la opción 'familia': 4 como se sugirió anteriormente? Tuve un problema similar y eso me lo solucionó. Me sorprende que el problema persista incluso a fines de 2016. Me encontré con este problema en un RPI2 que ejecutaba Raspbian Lite usando el nodo v6.9.2.

especifique un dns utilizable, normalmente el 8.8.8.8 para el dockerfile ayudaría a esto. @ArsalanDotMe

y yo estaba recibiendo

Error: getaddrinfo ENOTFOUND undefined undefined:80

¡NO ES MUY ÚTIL EN ABSOLUTO!11

INDEFINIDO NO SE ENCUENTRA, SÍ, SEGURO

MÁS COMO "INDEFINIDO NO ES UNA FUNCIÓN"

¡¡¡NO SE PUEDE ARGUMENTAR ESO!!!1

¿ES UN NÚMERO DE LÍNEA AL FINAL O QUÉ?

¿CÓMO SE SUPONE QUE DEBO DEPURAR ESTO?

¿ES MUY DIFÍCIL PARA SUS DESARROLLADORES INCLUIR UN MENSAJE SIGNIFICATIVO LEGIBLE PARA EL SER HUMANO?

¿ESTÁS ESCRIBIENDO ESTO PARA MÁQUINAS? O PARA HUMANOS?

@halt-hammerzeit Por favor, cálmate, desde https://github.com/nodejs/node/commit/b619831381a3a93e64e963b7bd95adc4df2eafe7 parece que este error lamentablemente ilegible está ahí para la compatibilidad con versiones anteriores (en caso de que quieras saber por qué). No estoy seguro si esto es rompible en este momento.

@joyeecheung Buena foto de usuario

¿Alguien puede explicar, por favor, cómo resolver este problema ahora? ¿Actualizar nodo? Linux? ¿Algún paquete?
Estoy en Ubuntu 16.04 LTS ahora. Todavía tengo el problema.

Gracias.

@Vasiliy-Bondarenko
Esto significa que su hostname es undefined .
¿Quién lo hubiera adivinado?
Tan críptico y poco profesional de los desarrolladores de Node.js.

@catamphetamine , ¡puedes apostar! doble indefinido!

dat feel

@catamphetamine siempre es fácil culpar a alguien. Aunque esto no ayudará a nadie. Si desea mejorar la situación, abra una solicitud de extracción.

@BridgeAR siempre es fácil culpar a un no colaborador por señalar cosas que el equipo de apoyo no aborda y que ignora al decir que no está abriendo ninguna solicitud de

Como mencionó @joyeecheung hace unos 10 meses, cambiar este mensaje causará rupturas en la comunidad.

El consenso actual parece ser que cambiar esto afectará a más usuarios de lo que ayuda.

Si realmente tiene alguna información nueva, indíquelo, pero es poco probable que insultar logre algo.

¿Alguien puede explicar, por favor, cómo resolver este problema ahora? ¿Actualizar nodo? Linux? ¿Algún paquete?
Estoy en Ubuntu 16.04 LTS ahora. Todavía tengo el problema.

Gracias.

@ Vasiliy-Bondarenko, ¿puede proporcionar más información?
¿Qué versión de nodo estás usando?
¿Puedes publicar un fragmento de código de muestra?
También puede decirle explícitamente al DNS del nodo que busque una dirección IPv4 con:

var options = {
  host: XXXXXXXXXXXXX,
  family: 4,
  port: 80,
  path: '/'
};
http.get(options, cb);

El consenso actual parece ser que cambiar esto afectará a más usuarios de lo que ayuda.

que hará

insultar es poco probable que logre algo.

en realidad lo es, simplemente no estás viendo el panorama general

Simplemente hará que te ignoren o, si eres demasiado imbécil o spammeador, te baneen.

viene el mismo error
355

Estoy viendo un problema similar y, sorprendentemente, incluso pude reproducirlo con nslookup en high sierra aleatoriamente.

$ nslookup x.x.net
Server:     10.x.x.x
Address:    10.x.x.x#53

** server can't find x.x.net: NXDOMAIN

$ nslookup x.x.net
Server:     10.x.x.x
Address:    10.x.x.x#53

Non-authoritative answer:
x.x.net canonical name = x.x.x.net.
Name:   x.x.x.net
Address: 10.x.x.x

Mi Nodo ENOTFOUND está en v8.4.0 y ocurre de manera intermitente mientras se resuelven las dependencias del paquete Bower para un proyecto, por lo que en realidad estoy usando la solicitud a través del paquete Bower npm. ¿Hay alguna forma de forzar la solicitud para usar IPv4 globalmente en tiempo de ejecución? ¿Supongo que la glibc que se envía con osx high sierra aún no ha sido reparada?

Hola a todos.

También me sale este error. Originalmente estaba usando el nodo 8.9.3 y este problema ocurría espasmódicamente. Actualicé a 9.2.0 y aún así, en alguna ocasión surge el problema.

Mi proceso es un 'servicio' de larga duración que hace http POST s a otro servicio nodejs.
La biblioteca http que estoy usando es: axios 0.16.2

Y el error: getaddrinfo ENOTFOUND

¿Alguien tiene una solución o solución alternativa? Estoy casi en el punto en el que necesito hacer una llamada al sistema externo para curl... no es mi preferencia, como estoy seguro de que puedes imaginar

Encontré este error exacto porque el host no estaba definido en la configuración del servidor.

Estaba intentando una llamada en localhost, pero localhost no estaba definido para vincularse a 127.0.0.1

me sale este error Error: getaddrinfo ENOTFOUND api.remotehost.com api.remotehost.com:80
cuando trato de hacer esto en las funciones de la nube de Google
````
(req,res,siguiente)=>{
dejar opciones={
método: 'POST',
uri: config.uri,
formulario:{
nombredeusuario:req.cuerpo.nombredeusuario ,
a:req.cuerpo.a,
mensaje:req.cuerpo.mensaje
},
encabezados:{ apikey:req.headers.apikey ,
'Aceptar':"Aplicación/json"
},
familia: 4,
puerto: 80
}

   request(options)
   .then((_)=>res.status(200).send(_))
   .catch((e)=>res.status(500).send(e))

}
````
Funciona bien en localhost, solo obtengo esto en las funciones de la nube de Google

Intenté agregar este { family: 6 } como se sugirió anteriormente y comencé a recibir este nuevo error Error: getaddrinfo EAI_AGAIN api.remotehost.com:80

johnanisere,

Recibo un error similar con Cloud Functions. Como resolviste esto?

No lo resolví. Descubrí que las funciones de la nube solo funcionan con Google
puntos finales, no puede acceder a puntos finales de terceros a través de funciones en la nube.

El miércoles 14 de marzo de 2018 a las 3:04 a. m., Erick Franco [email protected]
escribió:

johnanisere,

Recibo un error similar con Cloud Functions. Como resolviste esto?


Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/nodejs/node/issues/5436#issuecomment-372879992 , o silenciar
la amenaza
https://github.com/notifications/unsubscribe-auth/AYUraeHhpXDDrluU0Kr2YGkB8d6l4AXbks5teHrLgaJpZM4Hix3S
.

Entonces, descubrí el problema. Deberá habilitar la facturación en https://google.firebase.com para que su proyecto realice solicitudes de API externas. Si la facturación no está habilitada, recibirá un error.

Indicado al final de este artículo.
https://www.menubar.io/firebase-functions-sending-emails/

Solo en caso de que pueda ayudar a alguien. Tuvimos el mismo problema al usar 9.10.1 cuando nuestra aplicación tenía mucha carga, lo resolvimos almacenando en caché los valores de DNS con https://github.com/devswede/dns-cache (creemos que estaba relacionado con https://github .com/nodejs/node-v0.x-archive/issues/7729).

También noté que esto sucede en momentos aleatorios en una aplicación CLI que realiza múltiples llamadas a diferentes API, probará el caché de DNS y verá si eso lo soluciona.

¿Existe ya una solución a nivel del sistema (SO) para este problema? Estoy ejecutando el nodo v10 en la ventana acoplable y no puedo resolver ciertos nombres de host debido a esto.

Necesita una forma de arreglar esto sin tocar el código de la aplicación (lo que hacen las soluciones anteriores)

El mismo problema aquí al intentar solicitar datos del enrutador Fritzbox ( fritz.box ) unsing node v8.11.2 Alrededor del 30% de las solicitudes fallarán:

{ Error: getaddrinfo ENOTFOUND fritz.box fritz.box:49000
    at errnoException (dns.js:50:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)
  code: 'ENOTFOUND',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'fritz.box',
  host: 'fritz.box',
  port: '49000' }

¿Alguna solución para esto? Comencé a obtenerlo localmente al azar, codifiqué algunos ips pero es molesto

alguien pls ayuda!

estoy enfrentando el mismo problema, estoy usando firebase con la aplicación react native expo
alguien me dice si es posible con firebase spark plane

FetchError: la solicitud a https://exp.host/--/api/v2/push/send falló, motivo: getaddrinfo ENOTFOUND exp.host exp. anfitrión: 443

Ver el mismo problema en un servicio de larga duración. Reiniciar el servicio lo resuelve (temporalmente).

Me he enfrentado al mismo problema. cuando demasiadas solicitudes, el error saldrá.
Por qué se cerró este tema.


nodo: v10

Tengo una aplicación de transportador angular. Después de realizar la prueba de extremo a extremo, necesito escribir una llamada API a Azure y eliminar algún registro. También estoy recibiendo este error. Todavía no hay solución.

Mi API alojada en Azure necesita una conexión https para llamar.

image

Chicos... como solución, agregué una función de suspensión (1 milisegundo) entre las solicitudes y, al menos por ahora, el error desapareció.

Compartiendo la función si alguien quiere probar:

export function msleep (n) { Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, n) }

Gracias por tu respuesta. ¿Estoy llamando a este método deleteRegistration solo una vez? ¿Por qué necesito dormir esto?
Consulte la captura de pantalla.

Tal vez podamos recuperar la descripción del error directamente del motor V8 como se hizo en este 22995 PR usando la función uvExceptionWithHostPort .

@bnoordhuis Por lo que puedo entender, agregar family: 4 es solo una solución. ¿Entonces esto es un error en el nodo? Si es así, ¿se trata de un error en todas las plataformas y todas las versiones del nodo o se solucionó en alguna versión?

@croraf Si se refiere a https://github.com/nodejs/node/issues/5436#issuecomment -189474356, es un error de libc, no de Node.js.

@bnoordhuis Entonces, ¿es básicamente un problema del sistema operativo?

Estoy usando centos donde tengo ldd --version ldd (GNU libc) 2.17 .

Veo que GNU libc 2.17 es de diciembre de 2012. https://en.wikipedia.org/wiki/GNU_C_Library#Version_history .
¿Crees que es probable que el error esté presente en 2.17?
(Veo que en 2.18 y 2.19 hay algunos parches para getaddrinfo: https://www.gnu.org/software/libc/)

@croraf Correcto. No recuerdo la versión exacta que contiene la solución, pero en el momento de escribir esto, glibc 2.23 era la última y esa versión funcionaba bien.

Para mí en macOS, esto también fue un problema de resolución basado en la familia seleccionada. ¿Alguien sabe qué biblioteca del sistema en macOS se usa para llevar a cabo las funciones de resolución? Esta biblioteca también parece cambiar aleatoriamente entre 4 y 6 resoluciones. Creo que no es la glibc, ¿verdad? 😉

@dploeger Es /usr/lib/libSystem.B.dylib , que es la versión de libc de macos.

libSystem es en realidad una especie de biblioteca de contenedores, la resolución de DNS real está en /usr/lib/system/libsystem_info.dylib , pero probablemente sea más información de la que necesitaba. :-)

Gracias, @bnoordhuis. Pero ahora que lo pienso, ¿no deberían los programas del sistema tener el mismo problema de hacer aleatoriamente 4 y 6 consultas? ¿O simplemente manejan el resultado mejor que Node (o v8 en realidad)?

Esperaría que, si no se proporciona ninguna familia, Node debería hacer ambas consultas y devolver una que sea exitosa; el valor predeterminado aún debería ser 4 actualmente, supongo.

Pero, por desgracia, no sé en qué nivel se lleva a cabo esto realmente. 😁

Node.js es agnóstico, simplemente pasa las opciones al sistema de resolución. Eso significa que tienes mucho control, pero también puedes lidiar con las idiosincrasias de libc.

Bueno. Y las otras aplicaciones (como ping ) hacen lo mismo pero manejan el resultado por usted. Entendido. Gracias.

mismo problema nodo expres js

Tuve el mismo problema cuando nodo trabajar detrás del proxy.

curl, wget, browser y postman funcionan bien, pero no la solicitud de nodo.

funciona para mí configurar proxy.host e proxy.port en la configuración de axios.

Me enfrento a este problema mientras ejecuto un transportador angular en una tubería azul. funciona bien en la máquina local pero falla en la canalización. ¿Hay alguna solución a esto ahora? Si no hay soluciones, por favor?

image

No entiendo cómo la " corrección " propuesta por @bnoordhuis en 2016 sigue siendo relevante (o no es una opción predeterminada o no está documentada) 😞

Fácil: si Node.js enumerara todos los errores aleatorios que podría encontrar en alguna biblioteca de terceros, la documentación sería varias veces su tamaño actual.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

danialkhansari picture danialkhansari  ·  3Comentarios

danielstaleiny picture danielstaleiny  ·  3Comentarios

filipesilvaa picture filipesilvaa  ·  3Comentarios

Icemic picture Icemic  ·  3Comentarios

sandeepks1 picture sandeepks1  ·  3Comentarios