انٹرنیٹ پر موجود زیادہ تر "Cloudflare کو bypass کیسے کریں" والے ٹیوٹوریلز 2024 کے آخر میں کام کرنا چھوڑ گئے۔ وجہ یہ نہیں کہ Cloudflare نے نئے دفاع شامل کیے۔ وجہ یہ ہے کہ پرانے دفاع، یعنی JA3 fingerprinting اور بنیادی header چیکس، کی جگہ ایک نئی نسل آ گئی جو ہر شارٹ کٹ کو توڑ دیتی ہے۔ یہ گائیڈ بتاتی ہے کہ 2026 میں Cloudflare اصل میں کیا چیک کرتا ہے، cloudscraper، undetected-chromedriver، اور زیادہ تر "stealth" plugins کیوں ناکام ہوتے ہیں، اور وہ چار پرتوں والا نسخہ جو اب بھی production میں کام کرتا ہے۔
ایمانداری سے ابتدائی خلاصہ: کوئی ایک ٹرک نہیں ہے۔ Cloudflare کو قابل اعتماد طریقے سے bypass کرنے کے لیے درست IP، درست TLS fingerprint، درست HTTP/2 frame ترتیب، اور (Bot Management tier کے لیے) ایک حقیقی browser چاہیے۔ ان میں سے کوئی ایک بھی غلط ہو تو آپ کی request origin server تک پہنچنے سے پہلے ہی edge filter پر ناکام ہو جاتی ہے۔
Cloudflare کی bot detection edge پر filters کی ایک pipeline کے طور پر چلتی ہے۔ ہر request ان میں سے ترتیب وار گزرتی ہے۔ جو filter سب سے پہلے مسترد کرے وہ جیت جاتا ہے، یعنی ایک request کسی بھی fingerprint یا header کا جائزہ لیے جانے سے پہلے صرف IP reputation کی بنیاد پر ناکام ہو سکتی ہے۔
یہ سب سے پہلا اور سب سے سستا چیک ہے۔ Cloudflare ایک database رکھتا ہے جو ASN (Autonomous System Number) کے حساب سے ترتیب دی گئی ہے۔ معروف cloud providers سے تعلق رکھنے والے ASNs (AWS AS16509, GCP AS15169, Azure AS8075, OVH AS16276, DigitalOcean AS14061, Hetzner AS24940, Vultr AS20473) کو سب سے زیادہ جانچ پڑتال کا سامنا ہوتا ہے۔ بہترین browser-grade fingerprint کے باوجود، ان ASNs سے نکلنے والی request کو بے قصور ثابت ہونے تک قصوروار سمجھا جاتا ہے۔
رہائشی ASNs (Comcast AS7922, Verizon AS701, China Telecom AS4134, BT AS2856) کو جائز فرض کیا جاتا ہے۔ بھدے Python fingerprint کے ساتھ کسی رہائشی IP سے آنے والی request پھر بھی گزر سکتی ہے، جبکہ بہترین Chrome fingerprint کے ساتھ datacenter IP سے آنے والی request کو challenge یا block کیا جائے گا۔
JA4 JA3 کا 2023 کا جانشین ہے، جو FoxIO نے جاری کیا۔ یہ مخصوص TLS ClientHello fields کو hash کرتا ہے: TLS version، cipher suites (ترتیب میں)، extensions (ترتیب میں)، ALPN protocols، signature algorithms، اور supported groups۔ نتیجہ ایک متعین fingerprint ہوتا ہے جیسے t13d1516h2_8daaf6152771_b1ff8ab2d16f۔
اصل Chrome 124 ایک مخصوص JA4 پیدا کرتا ہے۔ اصل Firefox 124 ایک مختلف JA4 پیدا کرتا ہے۔ Python کی requests library (جو urllib3 اور OpenSSL استعمال کرتی ہے) ایک ایسا JA4 پیدا کرتی ہے جو کوئی حقیقی browser کبھی نہیں دیتا، کیونکہ cipher ترتیب اور extension list نہ Chrome سے ملتی ہے نہ Firefox سے۔ Cloudflare کسی بھی HTTP header کو parse کرنے سے پہلے اس pattern کو flag کر دیتا ہے۔
اس کا مطلب: ہر وہ library جو system OpenSSL یا stock Python TLS استعمال کرتی ہے، قابلِ شناخت ہے۔ اس میں requests، aiohttp، httpx (default config)، اور ان پر بنا کوئی بھی "bypass" wrapper شامل ہے۔
HTTP/2 connections settings frames، window updates، priority frames، اور headers frames لے کر چلتے ہیں۔ Browsers انہیں مخصوص قدروں کے ساتھ ایک مخصوص ترتیب میں بھیجتے ہیں۔ Chrome 124 ابتدائی SETTINGS frame ان بالکل قدروں کے ساتھ بھیجتا ہے، پھر ایک WINDOW_UPDATE، پھر HEADERS۔ Python کا httpx جب HTTP/2 enabled ہو تو ایک مختلف settings payload بھیجتا ہے اور وہ priority frames چھوڑ دیتا ہے جو Chrome شامل کرتا ہے۔
HTTP/2 pseudo-header ترتیب بھی شناخت ظاہر کر دیتی ہے۔ Chrome :method، :authority، :scheme، :path اسی ترتیب میں بھیجتا ہے۔ Firefox :method، :path، :authority، :scheme بھیجتا ہے۔ زیادہ تر Python اور Go libraries انہیں حروفِ تہجی کے حساب سے serialize کرتی ہیں۔ Cloudflare اس ترتیب کا اعلان کردہ User-Agent کے لیے متوقع pattern سے موازنہ کرتا ہے اور بے میلیوں کو flag کرتا ہے۔
HTTP/1.1 headers داخل کرنے کی ترتیب محفوظ رکھتے ہیں۔ اصل Chrome headers ایک طے شدہ ترتیب میں بھیجتا ہے: Host، Connection، Cache-Control، sec-ch-ua، sec-ch-ua-mobile، sec-ch-ua-platform، Upgrade-Insecure-Requests، User-Agent، Accept، Sec-Fetch-Site، Sec-Fetch-Mode، Sec-Fetch-User، Sec-Fetch-Dest، Accept-Encoding، Accept-Language۔ Python کی requests انہیں دوبارہ ترتیب دیتی ہے اور بعض اوقات مختلف طریقے سے بڑے حروف میں لکھتی ہے۔ headers کو خود درست ترتیب میں سیٹ کرنا بھی مدد نہیں دیتا کیونکہ بنیادی library انہیں دوبارہ sort کر دیتی ہے۔
اگر پچھلے filters گزر جائیں مگر score پھر بھی مشکوک ہو، تو Cloudflare ایک JavaScript challenge پیش کرتا ہے۔ script browser کے ماحول کی قدروں (canvas hash، WebGL renderer، audio context، navigator properties، timing measurements) سے ایک token حساب کرتا ہے اور اسے XHR کے ذریعے جمع کرتا ہے۔ کوئی HTTP client اسے حل نہیں کر سکتا۔ آپ کو ایک حقیقی browser چاہیے، اور browser کو حقیقی نظر آنا چاہیے (کوئی navigator.webdriver = true نہیں، کوئی غائب properties نہیں)۔
Bot Management tier پر، Cloudflare مسلسل چلنے والے script کے ذریعے mouse movement، scroll velocity، click timing، اور keystroke dynamics جمع کرتا ہے۔ ایک headless browser جو page لوڈ کرتا ہے اور بغیر mouse ہلائے فوراً scrape کرنے لگتا ہے، سیکنڈوں میں پکڑا جاتا ہے۔ حقیقی صارفین بے ترتیب طریقے سے حرکت کرتے ہیں، رکتے ہیں، اور دوبارہ پڑھتے ہیں۔ Bots سیدھی لکیر میں scroll کرتے ہیں اور پکسل کے عین مطابق click کرتے ہیں۔
وہ شارٹ کٹ tools جنہوں نے 2021-2024 کی scraping کو طاقت دی، سب میں ایک ہی خرابی مشترک ہے: وہ نظر آنے والی سطح کو patch کرتے ہیں مگر بنیادی TLS stack کو نہیں۔
| Tool | یہ کیا patch کرتا ہے | یہ 2026 میں کیوں ناکام ہوتا ہے |
|---|---|---|
cloudscraper | JS challenge solver (legacy) | Cloudflare 2023 میں Turnstile پر منتقل ہو گیا؛ legacy challenges متروک |
undetected-chromedriver | Selenium leak flags کو patch کرتا ہے | JA4 پھر بھی بنیادی chromedriver TLS سے ظاہر ہوتا ہے؛ navigator.webdriver 40+ signals میں سے صرف ایک ہے |
selenium-stealth | جعلی JS properties داخل کرتا ہے | Cloudflare C++ پرت سے پڑھتا ہے، JS سے نہیں؛ جعل سازی غیر مطابق ہونے کے سبب قابل شناخت |
FlareSolverr | ایک بار challenge حل کرنے کے لیے Chromium کو لپیٹتا ہے | cf_clearance solver IP سے بندھا ہوتا ہے؛ نیا proxy token کو فوراً باطل کر دیتا ہے |
Stock puppeteer-extra-plugin-stealth | تقریباً 17 detection points کو patch کرتا ہے | Cloudflare نے 2024-2025 میں تقریباً 12 نئے چیک شامل کیے جو plugin میں شامل نہیں |
pattern واضح ہے: وہ tools جو حقیقی browser کو لپیٹتے ہیں اور معلوم leaks کو patch کرتے ہیں، مہینوں میں یہ دوڑ ہار جاتے ہیں۔ وہ tools جو browser کے TLS stack کی نقل کرتے ہیں (curl_cffi، tls-client) زندہ رہے ہیں کیونکہ وہ wire کے زیادہ قریب بیٹھتے ہیں۔
وہ bypass جو 2026 میں کام کرتا ہے، اسے چاروں پرتیں چاہئیں۔ کسی ایک کو بھی چھوڑنا کامیابی کی شرح کو ایک ہندسے تک گرا دیتا ہے۔
کسی بھی ایسی سائٹ کے لیے جو Cloudflare Pro یا اس سے اوپر چلا رہی ہو، یہ ناقابلِ مذاکرہ ہے۔ IP reputation filter TLS handshake مکمل ہونے سے پہلے datacenter ASNs کو مسترد کر دیتا ہے۔ کم از کم 10 منٹ کے لیے sticky session کے ساتھ ایک رہائشی proxy استعمال کریں تاکہ cf_clearance cookie زندہ رہے۔
curl_cffi (Python) یا tls-client (Go/Python) استعمال کریں۔ دونوں ایک ترمیم شدہ BoringSSL سے link کرتے ہیں جو Chrome کی بالکل cipher ترتیب، extension list، اور ALPN قدروں کے ساتھ آتی ہے۔
from curl_cffi import requests
response = requests.get(
"https://target.com/api/products",
impersonate="chrome124",
proxies={"https": "http://user-session-abc123:[email protected]:10001"},
timeout=30,
)
print(response.status_code, len(response.text))
impersonate="chrome124" parameter TLS stack کو بدل دیتا ہے تاکہ ClientHello Chrome 124 سے byte-for-byte ملے۔ JA4 hash اصل Chrome 124 install کے بالکل برابر ہوگا۔ اسے ایک رہائشی proxy کے ساتھ جوڑیں اور آپ پہلے دو filters سے گزر جائیں گے۔
جب آپ impersonate استعمال کرتے ہیں تو curl_cffi خود بخود headers کو Chrome کی ترتیب میں سیٹ کر دیتا ہے۔ اگر آپ custom headers شامل کریں تو انہیں بیچ میں داخل کرنے کے بجائے آخر میں جوڑیں۔ وہ headers سیٹ کرنے سے گریز کریں جو اصل Chrome نہ بھیجے (مثلاً عام navigation پر X-Requested-With)۔
Accept-Language کے لیے، اسے proxy کے جغرافیائی محل وقوع سے ملائیں۔ ایک US رہائشی IP جو Accept-Language: zh-CN,zh;q=0.9 بھیج رہا ہو، ایک چھوٹا مگر حقیقی signal ہے۔ US IPs کے لیے en-US,en;q=0.9، جرمن IPs کے لیے de-DE,de;q=0.9، وغیرہ استعمال کریں۔ یہ ان چند signals میں سے ایک ہے جنہیں آپ مفت میں ٹھیک کر سکتے ہیں۔
اگر target ایک Managed Challenge چلا دے (آپ کو response body میں ایک CF challenge page نظر آئے)، تو اکیلا curl_cffi اسے حل نہیں کر سکتا۔ patched Chromium کے ساتھ Playwright پر منتقل ہوں۔
from playwright.sync_api import sync_playwright
from rebrowser_playwright.sync_api import sync_playwright as rebrowser_sync
with rebrowser_sync() as p:
browser = p.chromium.launch(
headless=True,
proxy={
"server": "http://gate.jibaoproxy.com:10001",
"username": "user-session-abc123",
"password": "pass",
},
)
context = browser.new_context(
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
viewport={"width": 1920, "height": 1080},
locale="en-US",
timezone_id="America/New_York",
)
page = context.new_page()
page.goto("https://target.com/", wait_until="networkidle")
# cf_clearance is now in context.cookies()
cookies = context.cookies()
cf_clearance = next((c for c in cookies if c["name"] == "cf_clearance"), None)
browser.close()
stock playwright کے بجائے rebrowser-playwright استعمال کریں۔ یہ ان CDP runtime leaks (Runtime.enable، page کو CDP commands کا انکشاف) کو patch کرتا ہے جنہیں Cloudflare headless automation کا پتہ لگانے کے لیے پڑھتا ہے۔ challenge گزرنے کے بعد، cookies سے cf_clearance نکالیں اور اسے اصل scraping loop کے لیے واپس curl_cffi کو دے دیں۔ browser کی ضرورت ہر session میں ایک بار ہوتی ہے، ہر request پر نہیں۔
سب سے سستا proxy استعمال کرنے کی جبلت Cloudflare سے محفوظ سائٹس پر تقریباً ہمیشہ غلط ہوتی ہے۔ حقیقی اعداد کے ساتھ حساب سے گزریں۔
مفروضے: اوسط HTML page 500KB، کل 100,000 pages scrape کرنا، target Bot Fight Mode enabled کے ساتھ Cloudflare Pro استعمال کرتا ہے۔
| سیٹ اپ | Bandwidth لاگت | کامیابی کی شرح | فی کامیابی requests | کل لاگت | فی page لاگت |
|---|---|---|---|---|---|
| Datacenter $0.8/GB + requests | $0.0005 / req | 0.5% | 200 | $10,000 | $0.10 |
| Datacenter $0.8/GB + curl_cffi | $0.0005 / req | 3% | 33 | $1,650 | $0.0165 |
| Residential $2/GB + requests | $0.0033 / req | 40% | 2.5 | $825 | $0.0083 |
| Residential $2/GB + curl_cffi | $0.0033 / req | 92% | 1.09 | $360 | $0.0036 |
| Residential $2/GB + Playwright (rebrowser) | $0.017 / req (assets + JS) | 96% | 1.04 | $1,700 | $0.017 |
دو نتائج قابلِ ذکر ہیں:
یہ وہ pattern ہے جسے ہم ان گاہکوں کو تجویز کرتے ہیں جو پیمانے پر Cloudflare سے محفوظ targets scrape کرتے ہیں۔ یہ Playwright کے استعمال (جو سست اور مہنگا ہے) کو کم سے کم اور curl_cffi کے استعمال (جو تیز اور سستا ہے) کو زیادہ سے زیادہ کرتا ہے۔
from curl_cffi import requests as cf_requests
from rebrowser_playwright.sync_api import sync_playwright
PROXY_USER_FMT = "user-session-{sid}"
PROXY_HOST = "http://gate.jibaoproxy.com:10001"
PROXY_PASS = "your_password"
def get_cf_clearance(target_url, session_id):
"""One-shot Playwright call to solve the challenge and extract cf_clearance."""
with sync_playwright() as p:
browser = p.chromium.launch(
headless=True,
proxy={"server": PROXY_HOST,
"username": PROXY_USER_FMT.format(sid=session_id),
"password": PROXY_PASS},
)
ctx = browser.new_context(user_agent="Mozilla/5.0 ... Chrome/124.0.0.0 Safari/537.36")
page = ctx.new_page()
page.goto(target_url, wait_until="networkidle", timeout=45000)
cookies = ctx.cookies()
browser.close()
return {c["name"]: c["value"] for c in cookies}
def scrape_with_clearance(urls, session_id, cookies):
"""Reuse the same session_id (sticky IP) for all requests."""
proxy = f"http://{PROXY_USER_FMT.format(sid=session_id)}:{PROXY_PASS}@gate.jibaoproxy.com:10001"
out = []
for url in urls:
r = cf_requests.get(
url,
impersonate="chrome124",
proxies={"https": proxy},
cookies=cookies,
timeout=30,
)
if r.status_code == 200:
out.append((url, r.text))
elif r.status_code in (403, 503) and "challenge" in r.text.lower():
# cf_clearance expired; re-solve
cookies = get_cf_clearance(url, session_id)
r = cf_requests.get(url, impersonate="chrome124",
proxies={"https": proxy}, cookies=cookies)
out.append((url, r.text))
return out, cookies
# Usage
session_id = "scrape-job-2026-05-27"
cookies = get_cf_clearance("https://target.com/", session_id)
results, cookies = scrape_with_clearance(target_urls, session_id, cookies)
اس نسخے میں اہم نکات:
کچھ Cloudflare deployments کسی بھی معقول لاگت پر bypass نہیں کیے جا سکتے۔ اگر آپ کو یہ signals نظر آئیں، تو ایک ایسے bypass پر بجٹ جلانے کے بجائے جو کبھی مستحکم نہیں ہوگا، حکمت عملی بدلیں (ایک API استعمال کریں، سائٹ کے مالک کے ساتھ شراکت کریں، یا data خریدیں)۔
| Target tier | نسخہ | متوقع کامیابی کی شرح |
|---|---|---|
| CF Free / Pro (no Bot Fight) | Datacenter + curl_cffi | 60-75% |
| CF Free / Pro + Bot Fight Mode | Residential + curl_cffi | 85-93% |
| CF Business | Residential + curl_cffi + کبھی کبھار Playwright | 80-90% |
| CF Business + Turnstile | Residential + rebrowser-playwright (ہر request) | 70-85% |
| CF Enterprise + Bot Management | Mobile residential + rebrowser + behavior simulation | 30-60% |
| CF Enterprise + Bot Management + custom WAF | scrape نہ کریں؛ API یا شراکت اختیار کریں | <10% |
JIBAO Proxy dynamic رہائشی proxies پیش کرتا ہے جس میں 240+ ممالک میں 90M+ IPs، 60 منٹ تک sticky sessions، اور ملکی سطح کی targeting $2/GB سے شروع ہوتی ہے۔ mobile IPs کے لیے، dynamic mobile proxies دیکھیں۔ دونوں curl_cffi، tls-client، Playwright، Puppeteer، Selenium، اور کسی بھی ایسے HTTP client کے ساتھ box سے باہر کام کرتے ہیں جو HTTP/SOCKS5 proxies کی حمایت کرتا ہے۔
متعلقہ مطالعہ: Sticky بمقابلہ Rotating Proxy Sessions session configuration کو تفصیل سے بیان کرتا ہے۔ AI Agents کے لیے Proxies اس AI agent استعمال کے کیس کی وضاحت کرتا ہے جو Cloudflare bypass workflow کے ساتھ بہت زیادہ ملتا ہے۔
500MB مفت ٹریفک حاصل کریں۔ عہد بند ہونے سے پہلے اپنے target کے خلاف curl_cffi + sticky رہائشی امتزاج چلائیں۔
مفت Trial شروع کریںنئے صارفین کو سائن اپ پر 500MB ملتے ہیں، اس کے علاوہ پہلے ری چارج پر بونس۔ پیشکش محدود وقت کے لیے ہے۔