【问题标题】:Making an HTTP request using node.js throws EAFNOSUPPORT使用 node.js 发出 HTTP 请求会引发 EAFNOSUPPORT
【发布时间】:2011-06-04 18:57:47
【问题描述】:

我正在尝试使用 node.js 发出一个简单的 HTTP GET 请求,但我在使用 node.js v0.3.4-pre(即今天早上从 HEAD 编译)时遇到了麻烦。这是我的代码:

    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);
                    });
            });
    });

这是我得到的错误:

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)

【问题讨论】:

  • 由于糟糕的网络导致重复提交表单,我已删除您链接到的问题。

标签: node.js


【解决方案1】:

发现错误,siteUrl.port 将是 undefined,除非 URL 明确命名端口。所以,解决办法是:

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

【讨论】:

    【解决方案2】:
    var site = http.createClient(siteUrl.port, siteUrl.host);
    

    应该是

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

    【讨论】:

      【解决方案3】:

      对于任何 connect() 尝试,相同的错误消息出现在我非常旧的 XPSP2 盒子上。例如,npm 无法做任何事情,简单的 http 请求失败。

      在尝试寻找解决方案时,这个帖子到处出现,但不是同一个问题。

      在我的情况下,它与 WSAIoctl(...) 在查询 WSAID_CONNECTEX 时总是返回 WSAEOPNOTSUPP 有关,这看起来很奇怪。这让我看到了一篇建议从 cmd 执行“netsh winsock reset”的帖子,从而解决了问题!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-07
        • 2014-04-05
        • 1970-01-01
        • 2011-12-19
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多