如何在node.js中的http响应中获取主机名?

时间:2013-09-25 11:03:28

标签: javascript node.js http httpresponse

我正在使用node.js的http模块来发出请求。我在数据库中有一堆网址。我从数据库中获取这些URL并在循环中发出请求。但是当响应到来时,我想获得该响应的主机名,因为我想根据该响应更新数据库中的内容。但我没有得到我得到回复的网站,所以我无法更新该网站的记录。

代码是这样的:

for (site = 0; site < no_of_sites; site++) {
    options = {
        hostname: sites[site].name,
        port: 80,
        method: 'GET',
        headers: {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0'
        }
    };

    var req = http.request(options, function (res) {
        console.log('HEADERS: ' + JSON.stringify(res.headers));
        if (res.statusCode == 200) {

            //Update record;
        }
    });
}

3 个答案:

答案 0 :(得分:2)

选项一:使用res.req

var req = http.request(options, function (res) {
  console.log(res.req._headers.host)
});

选项二:使用闭包

for (site = 0; site < no_of_sites; site++) {
    (function(){
        var options = {
            // ...
        };

        var req = http.request(options, function (res) {
            // options available here
            console.log(options);
        });
    }());
}

选项三

似乎thisres.req回调中的http.request()相同,但我不完全确定。

答案 1 :(得分:2)

我们可以在this对象中获取主机站点。

console.log(this._header.match(/Host\:(.*)/g));

答案 2 :(得分:1)

答案是 的console.log(res.socket._httpMessage._headers.host);