2011-01-06 18 views
9

Estoy tratando de hacer una simple solicitud HTTP GET usando node.js, pero me está dando problemas al utilizar node.js v0.3.4-pre (es decir, compilado desde HEAD a partir de esta mañana). Aquí está mi código:Realizando una solicitud HTTP usando node.js throws EAFNOSUPPORT

var cli = require('cli'); 
    var http = require('http'); 
    var url = require('url'); 

    cli.parse(); 

    cli.main(function(args, opts) { 
      this.debug(args[0]); 

      var siteUrl = url.parse(args[0]); 
      var site = http.createClient(siteUrl.port, siteUrl.host); 
      console.log(siteUrl); 

      var request = site.request("GET", siteUrl.pathname, {'host' : siteUrl.host}) 
      request.end(); 

      request.on('response', function(response) { 
        response.setEncoding('utf8'); 
        console.log('STATUS: ' + response.statusCode); 
        response.on('data', function(chunk) { 
          console.log("DATA: " + chunk); 
        }); 
      }); 
    }); 

Aquí está el error que me sale:

node.js:68 
     throw e; // process.nextTick error, or 'error' event on first tick 
    ^
Error: EAFNOSUPPORT, Address family not supported by protocol family 
    at doConnect (net.js:499:19) 
    at Client.connect (net.js:652:30) 
    at Client._ensureConnection (http.js:1033:10) 
    at Client.request (http.js:1048:8) 
    at Object.<anonymous> (/Users/paul/Desktop/readify.js:16:21) 
    at /usr/local/lib/node/.npm/cli/0.2.3-2/package/cli.js:995:18 
    at Object.main (/usr/local/lib/node/.npm/cli/0.2.3-2/package/cli.js:1000:9) 
    at Object.<anonymous> (/Users/paul/Desktop/readify.js:10:5) 
    at Module._compile (node.js:359:32) 
    at Object..js (node.js:367:14) 
+0

Envío de formulario duplicado debido a una red maliciosa. He eliminado la pregunta a la que se ha vinculado. –

Respuesta

12

encontrado el error, habrá siteUrl.portundefined menos que la URL explícitamente los nombres de un puerto. Por lo tanto, la solución es:

var site = http.createClient(siteUrl.port || 80, siteUrl.host); 
3
var site = http.createClient(siteUrl.port, siteUrl.host); 

debería ser más bien

var site = http.createClient(siteUrl.port || 80, siteUrl.hostname); 
1

El mismo mensaje de error apareció en mi muy antiguo XPSP2-caja para CUALQUIER connect() - intentos. E.g npm no pudo hacer nada, y las solicitudes HTTP simples fallaron.

Al intentar encontrar una solución, esta publicación apareció por todas partes, pero no es el mismo problema.

En mi caso, tenía que ver con WSAIoctl (...) siempre devolviendo WSAEOPNOTSUPP al consultar WSAID_CONNECTEX, lo cual parecía extraño. Esto me llevó a una publicación recomendando hacer un "reinicio netsh winsock" del cmd, ¡que solucionó el problema!

Cuestiones relacionadas