diff --git a/README.md b/README.md index f0f8c01..8798dd7 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,8 @@ Bypass Cloudflare protection and get cookies/tokens. { "mode": "iuam", "domain": "https://olamovies.watch/generate", - "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" + "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", + "include_html": true } ``` @@ -84,6 +85,7 @@ Bypass Cloudflare protection and get cookies/tokens. - **`mode`** (required): `"iuam"` or `"turnstile"` - **`domain`** (required): Target website URL - **`user_agent`** (optional): User-Agent to use for the browser session +- **`include_html`** (optional): `true` to include the final page HTML in IUAM responses - **`proxy`** (optional): Proxy configuration object #### Response (Success) @@ -91,7 +93,8 @@ Bypass Cloudflare protection and get cookies/tokens. { "cf_clearance": "eNm9UOgqoNDTP.fmAK9JfvirEmLVpmd.ZWIfdqQxuTc-1758610092-1.2-2NwZwW6nK23HrAH71MtvOek9vCiiS7pUBGIPtra_gSBxYxY2csa6hW0j7i...", "user_agent": "Mozilla/5.0...", - "elapsed_time": 3.05 + "elapsed_time": 3.05, + "html": "..." } ``` diff --git a/endpoints/cloudflare.js b/endpoints/cloudflare.js index 9257ee1..7a28cda 100644 --- a/endpoints/cloudflare.js +++ b/endpoints/cloudflare.js @@ -1,3 +1,15 @@ +async function getPageHtml(page, url) { + try { + await page.goto(url, { waitUntil: "domcontentloaded", timeout: 10000 }) + } catch (_) {} + + try { + return await page.content() + } catch (_) { + return null + } +} + async function cloudflare(data, page) { return new Promise(async (resolve, reject) => { if (!data.domain) return reject(new Error("Missing domain parameter")) @@ -10,11 +22,13 @@ async function cloudflare(data, page) { if (!isResolved) { isResolved = true const elapsedTime = (Date.now() - startTime) / 1000 - resolve({ + const response = { cf_clearance: null, user_agent: userAgent, elapsed_time: elapsedTime, - }) + } + if (data.include_html) response.html = null + resolve(response) } }, 20000) @@ -52,11 +66,17 @@ async function cloudflare(data, page) { isResolved = true clearTimeout(cl) - resolve({ + const response = { cf_clearance, user_agent: userAgent, elapsed_time: elapsedTime, - }) + } + + if (data.include_html) { + response.html = await getPageHtml(page, data.domain) + } + + resolve(response) } } } diff --git a/index.js b/index.js index 273b4ce..bb5a493 100644 --- a/index.js +++ b/index.js @@ -103,6 +103,9 @@ app.post('/cloudflare', async (req, res) => { if (data.user_agent && typeof data.user_agent !== 'string') { return res.status(400).json({ message: 'Bad Request: invalid user_agent' }) } + if (typeof data.include_html !== 'undefined' && typeof data.include_html !== 'boolean') { + return res.status(400).json({ message: 'Bad Request: invalid include_html' }) + } if (authToken && data.authToken !== authToken) { return res.status(401).json({ message: 'Unauthorized' }) } @@ -112,7 +115,7 @@ app.post('/cloudflare', async (req, res) => { } let cacheKey, cached - if (CACHE_ENABLED && data.mode === "iuam") { + if (CACHE_ENABLED && data.mode === "iuam" && !data.include_html) { cacheKey = JSON.stringify(data) cached = readCache(cacheKey) @@ -150,7 +153,7 @@ app.post('/cloudflare', async (req, res) => { .then(r => ({ ...r })) .catch(err => ({ code: 500, message: err.message })) - if (CACHE_ENABLED && (!result.code || result.code === 200)) { + if (CACHE_ENABLED && !data.include_html && (!result.code || result.code === 200)) { writeCache(cacheKey, result) } break