import fetch from 'node-fetch'; export async function fetchHTML(url, retries = 2, timeout = 15000) { for (let attempt = 1; attempt <= retries; attempt++) { try { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), timeout); const response = await fetch(url, { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.9", "Accept-Encoding": "gzip, deflate, br", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1", "Cache-Control": "max-age=0", "Referer": url.includes('prsindia.org') ? "https://prsindia.org/" : "https://www.myneta.info/" }, signal: controller.signal, redirect: 'follow', compress: true }); clearTimeout(timeoutId); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const html = await response.text(); return html; } catch (error) { if (attempt === retries) { throw error; } await new Promise(resolve => setTimeout(resolve, 500 * attempt)); } } }