#!/usr/bin/env node
const https = require('https');
const http = require('http');
const { program } = require('commander');
program
.version('1.0.0')
.description('Strips metadata from HTTP responses.')
.option('-u, --url <url>', 'The URL to fetch.')
.option('-o, --output <file>', 'The file to save the response to.')
.parse(process.argv);
const options = program.opts();
async function stripMetadata(url) {
return new Promise((resolve, reject) => {
const protocol = url.startsWith('https') ? https : http;
protocol.get(url, (res) => {
// Remove headers, including metadata
const headers = {};
for (const key in res.headers) {
if (!['content-type', 'content-length', 'date', 'server'].includes(key)) {
headers[key] = res.headers[key];
}
}
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
resolve(data);
});
res.on('error', (err) => {
reject(err);
});
}).on('error', (err) => {
reject(err);
});
});
}
async function main() {
if (!options.url) {
console.error('Error: URL is required. Use -u or --url.');
process.exit(1);
}
try {
const responseData = await stripMetadata(options.url);
if (options.output) {
require('fs').writeFileSync(options.output, responseData);
console.log(`Response saved to ${options.output}`);
} else {
console.log(responseData);
}
} catch (error) {
console.error('Error:', error);
process.exit(1);
}
}
main();
Add your comment