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);
但我的headers.html是空的...如何正确保存response.headers文件?我可以稍后修改标题并将其发送给用户没有问题,或者它是否以某种方式受到限制?我想从服务器获取数据,通过节点修改数据,然后将其发送给用户。
答案 0 :(得分:1)
首先,确认您使用的是http.request
您的问题也可能是因为默认情况下请求返回buffer
,您的流是UTF-8格式。
“抓住”标题的更好方法可能是http请求发出的事件:
var postData = querystring.stringify({
'msg': 'Hello World!'
});
var options = {
hostname: 'www.google.com',
port: 80,
path: '/upload',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
var req = http.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.log(`problem with request: ${e.message}`);
});
// write data to request body
req.write(postData);
req.end();
答案 1 :(得分:1)
如果您使用的是请求或http模块,则无关紧要。当您仅使用{method:' HEAD'}请求标头时,方法主体为空,但标头位于响应流中。我想你的问题是需要标题并将它们显示为[objest Object]。你需要在这个问题上将对象更改为字符串 - 只需使用console.log显示它或将其传递给文件。
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 :)
您可以毫无问题地传递这些标题。