diff --git a/README.md b/README.md index 8798dd7..f043e96 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,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", - "include_html": true + "include_html": true, + "include_cookies": true } ``` @@ -86,6 +87,7 @@ Bypass Cloudflare protection and get cookies/tokens. - **`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 +- **`include_cookies`** (optional): `true` to include all cookies in IUAM responses - **`proxy`** (optional): Proxy configuration object #### Response (Success) @@ -94,7 +96,10 @@ 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, - "html": "..." + "html": "...", + "cookies": [ + { "name": "cf_clearance", "value": "...", "domain": ".example.com" } + ] } ``` diff --git a/endpoints/cloudflare.js b/endpoints/cloudflare.js index 7a28cda..16b5719 100644 --- a/endpoints/cloudflare.js +++ b/endpoints/cloudflare.js @@ -1,8 +1,10 @@ -async function getPageHtml(page, url) { +async function ensurePageLoaded(page, url) { try { await page.goto(url, { waitUntil: "domcontentloaded", timeout: 10000 }) } catch (_) {} +} +async function getPageHtml(page) { try { return await page.content() } catch (_) { @@ -10,6 +12,14 @@ async function getPageHtml(page, url) { } } +async function getPageCookies(page, url) { + try { + return await page.cookies(url) + } catch (_) { + return null + } +} + async function cloudflare(data, page) { return new Promise(async (resolve, reject) => { if (!data.domain) return reject(new Error("Missing domain parameter")) @@ -28,6 +38,7 @@ async function cloudflare(data, page) { elapsed_time: elapsedTime, } if (data.include_html) response.html = null + if (data.include_cookies) response.cookies = null resolve(response) } }, 20000) @@ -72,8 +83,16 @@ async function cloudflare(data, page) { elapsed_time: elapsedTime, } + if (data.include_html || data.include_cookies) { + await ensurePageLoaded(page, data.domain) + } + if (data.include_html) { - response.html = await getPageHtml(page, data.domain) + response.html = await getPageHtml(page) + } + + if (data.include_cookies) { + response.cookies = await getPageCookies(page, data.domain) } resolve(response) diff --git a/index.js b/index.js index bb5a493..dfe6884 100644 --- a/index.js +++ b/index.js @@ -106,6 +106,9 @@ app.post('/cloudflare', async (req, res) => { if (typeof data.include_html !== 'undefined' && typeof data.include_html !== 'boolean') { return res.status(400).json({ message: 'Bad Request: invalid include_html' }) } + if (typeof data.include_cookies !== 'undefined' && typeof data.include_cookies !== 'boolean') { + return res.status(400).json({ message: 'Bad Request: invalid include_cookies' }) + } if (authToken && data.authToken !== authToken) { return res.status(401).json({ message: 'Unauthorized' }) } @@ -115,7 +118,7 @@ app.post('/cloudflare', async (req, res) => { } let cacheKey, cached - if (CACHE_ENABLED && data.mode === "iuam" && !data.include_html) { + if (CACHE_ENABLED && data.mode === "iuam" && !data.include_html && !data.include_cookies) { cacheKey = JSON.stringify(data) cached = readCache(cacheKey) @@ -153,7 +156,7 @@ app.post('/cloudflare', async (req, res) => { .then(r => ({ ...r })) .catch(err => ({ code: 500, message: err.message })) - if (CACHE_ENABLED && !data.include_html && (!result.code || result.code === 200)) { + if (CACHE_ENABLED && !data.include_html && !data.include_cookies && (!result.code || result.code === 200)) { writeCache(cacheKey, result) } break