我能';t将http头通过管道传输到node.js中的流将其保存到文件中

我能';t将http头通过管道传输到node.js中的流将其保存到文件中,node.js,http-headers,Node.js,Http Headers,但是my headers.html是空的。。。如何正确地将response.headers保存到文件?我是否可以稍后修改标题并将其发送给用户而不会出现问题,或者以某种方式受到限制?我想从服务器获取数据,通过节点修改数据,然后将其发送给用户。首先,验证您是否正在使用http.request 您的问题也可能是因为默认情况下请求返回缓冲区,并且您的流是UTF-8格式的 另外,“捕获”标头的更好方法可能是通过http请求发出的事件: var postData=querystring.stringify

但是my headers.html是空的。。。如何正确地将response.headers保存到文件?我是否可以稍后修改标题并将其发送给用户而不会出现问题,或者以某种方式受到限制?我想从服务器获取数据,通过节点修改数据,然后将其发送给用户。

首先,验证您是否正在使用
http.request

您的问题也可能是因为默认情况下请求返回
缓冲区
,并且您的流是UTF-8格式的

另外,“捕获”标头的更好方法可能是通过http请求发出的事件:

var postData=querystring.stringify({
“msg”:“你好,世界!”
});
变量选项={
主机名:“www.google.com”,
港口:80,
路径:'/upload',
方法:“POST”,
标题:{
“内容类型”:“应用程序/x-www-form-urlencoded”,
“内容长度”:缓冲区.ByTeleLength(postData)
}
};
var req=http.request(选项,(res)=>{
log(`STATUS:${res.statusCode}`);
log(`HEADERS:${JSON.stringify(res.HEADERS)}`);
res.setEncoding('utf8');
res.on('数据',(块)=>{
log(`BODY:${chunk}`);
});
res.on('结束',()=>{
log('响应中没有更多数据');
});
});
请求开启('错误',(e)=>{
log(`problemwithrequest:${e.message}`);
});
//将数据写入请求主体
请求写入(postData);

请求结束()无论您使用的是请求还是http模块。当您仅使用{method:'HEAD'}请求头时,方法体为空,但头驻留在响应流中。我想您的问题在于需要标题并将其显示为[objest Object]。在这个问题上,您需要将对象更改为字符串—只需使用console.log显示它或将它通过管道传输到文件

var fsHeaders = fs.createWriteStream('headers.html', 'utf-8');
var getHeaders = request('http://google.com', {method: 'HEAD'}, function (error, response, body)
{
    if (error || response.statusCode !== 200)
    {
        return res.redirect('/');
    }

    if (!error && response.statusCode == 200)
    {
        var tester = response.body;
        console.log(tester + 'response.body is EMPTY... so the headers are stored not in the "body"... \n');
        var targetHeaders = response.headers;
        body = body + JSON.stringify(targetHeaders);
        console.log(body + 'OK! \n');
    }
}).pipe(fsHeaders);

您可以随后毫无问题地传递这些标题。

我正在使用请求模块请求页面正文/标题(var request=require('request');)我确实尝试。。。下载。。。well request是一个更好的字,目标页面的html代码,并以utf-8格式将其传输到流,其工作良好。数据被放入正确的文件中。我猜headers请求并没有在body变量中传递,或者它是body的一部分,与它的主要内容(html代码)是分开的。。。您可能是对的,它有缓冲区格式。我将在不使用{method:'HEAD'}属性的情况下对其进行更多的测试。哦,好吧,我想,头是响应对象的一部分。试试这个。
                        var targetHeaders = objectToString(resp.headers, targetHeaders);

                        function objectToString(object, outputString)
                        {
                            var outputString = '';
                            for (var i in object)
                            {
                                if (object.hasOwnProperty(i))
                                {
                                    outputString += i + ': ' + object[i] + ' \n';
                                }
                            }
                            return outputString;
                        }

now console.log(targetheaders); // OK! no [object Object] anymore :)