1. #!/usr/bin/env node
  2. const https = require('https');
  3. const http = require('http');
  4. const { program } = require('commander');
  5. program
  6. .version('1.0.0')
  7. .description('Strips metadata from HTTP responses.')
  8. .option('-u, --url <url>', 'The URL to fetch.')
  9. .option('-o, --output <file>', 'The file to save the response to.')
  10. .parse(process.argv);
  11. const options = program.opts();
  12. async function stripMetadata(url) {
  13. return new Promise((resolve, reject) => {
  14. const protocol = url.startsWith('https') ? https : http;
  15. protocol.get(url, (res) => {
  16. // Remove headers, including metadata
  17. const headers = {};
  18. for (const key in res.headers) {
  19. if (!['content-type', 'content-length', 'date', 'server'].includes(key)) {
  20. headers[key] = res.headers[key];
  21. }
  22. }
  23. let data = '';
  24. res.on('data', (chunk) => {
  25. data += chunk;
  26. });
  27. res.on('end', () => {
  28. resolve(data);
  29. });
  30. res.on('error', (err) => {
  31. reject(err);
  32. });
  33. }).on('error', (err) => {
  34. reject(err);
  35. });
  36. });
  37. }
  38. async function main() {
  39. if (!options.url) {
  40. console.error('Error: URL is required. Use -u or --url.');
  41. process.exit(1);
  42. }
  43. try {
  44. const responseData = await stripMetadata(options.url);
  45. if (options.output) {
  46. require('fs').writeFileSync(options.output, responseData);
  47. console.log(`Response saved to ${options.output}`);
  48. } else {
  49. console.log(responseData);
  50. }
  51. } catch (error) {
  52. console.error('Error:', error);
  53. process.exit(1);
  54. }
  55. }
  56. main();

Add your comment