इंटरनेट पर "Cloudflare को कैसे bypass करें" वाले ज़्यादातर tutorials 2024 के आख़िर में काम करना बंद कर चुके हैं। इसकी वजह यह नहीं कि Cloudflare ने नई सुरक्षाएँ जोड़ीं। बल्कि यह है कि पुरानी सुरक्षाओं, JA3 fingerprinting और बुनियादी header जाँचों, को एक नई पीढ़ी से बदल दिया गया जो हर शॉर्टकट को तोड़ देती है। यह गाइड बताती है कि Cloudflare 2026 में असल में क्या जाँचता है, cloudscraper, undetected-chromedriver और ज़्यादातर "stealth" plugins क्यों विफल होते हैं, और वह चार-परत वाला नुस्ख़ा जो production में अब भी काम करता है।
शुरुआत में ही ईमानदार सार: कोई एक तरकीब नहीं है। Cloudflare को भरोसेमंद ढंग से bypass करने के लिए सही IP, सही TLS fingerprint, सही HTTP/2 frame ordering, और (Bot Management स्तर के लिए) एक असली browser चाहिए। इनमें से किसी एक को भी ग़लत कर दें और आप अपनी request के origin server तक पहुँचने से पहले ही edge filter पर विफल हो जाते हैं।
Cloudflare का bot detection edge पर filters की एक pipeline के रूप में चलता है। हर request क्रम में इनसे गुज़रती है। अस्वीकार करने वाला सबसे पहला filter जीतता है, जिसका मतलब है कि कोई request किसी fingerprint या header की जाँच होने से पहले ही अकेले IP प्रतिष्ठा पर विफल हो सकती है।
यह पहली और सबसे सस्ती जाँच है। Cloudflare ASN (Autonomous System Number) से keyed एक database रखता है। जाने-माने cloud providers से जुड़े ASNs (AWS AS16509, GCP AS15169, Azure AS8075, OVH AS16276, DigitalOcean AS14061, Hetzner AS24940, Vultr AS20473) को सबसे ज़्यादा जाँच-पड़ताल मिलती है। एक बेहतरीन browser-स्तर के fingerprint के साथ भी, इन ASNs से उत्पन्न होने वाली request को निर्दोष साबित होने तक दोषी माना जाता है।
Residential ASNs (Comcast AS7922, Verizon AS701, China Telecom AS4134, BT AS2856) को वैध माना जाता है। एक भद्दे Python fingerprint वाली residential 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 एक अलग बनाता है। Python की requests library (जो urllib3 और OpenSSL इस्तेमाल करती है) एक ऐसा JA4 बनाती है जो कोई असली browser कभी उत्सर्जित नहीं करता, क्योंकि cipher क्रम और extension सूची न Chrome से मेल खाते हैं न Firefox से। Cloudflare इस पैटर्न को किसी HTTP header को parse करने से पहले ही 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। HTTP/2 सक्षम वाला Python का httpx एक अलग settings payload भेजता है और Chrome में शामिल priority frames को छोड़ देता है।
HTTP/2 pseudo-header क्रम भी पहचान लीक करता है। Chrome :method, :authority, :scheme, :path इसी क्रम में भेजता है। Firefox :method, :path, :authority, :scheme भेजता है। ज़्यादातर Python और Go libraries इन्हें वर्णमाला के क्रम में serialize करती हैं। Cloudflare इस क्रम को घोषित User-Agent के लिए अपेक्षित पैटर्न से मिलाता है और बेमेल को flag करता है।
HTTP/1.1 headers insertion क्रम को बनाए रखते हैं। असली 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 इन्हें फिर से क्रमित करती है और कभी-कभी अलग ढंग से capitalize करती है। सही क्रम में manually headers सेट करने से भी मदद नहीं मिलती क्योंकि अंतर्निहित library उन्हें फिर से sort कर देती है।
अगर पिछले filters पास हो जाते हैं पर score अब भी संदिग्ध है, तो Cloudflare एक JavaScript challenge परोसता है। script browser environment मानों (canvas hash, WebGL renderer, audio context, navigator गुण, timing मापें) से एक token compute करती है और इसे XHR के ज़रिए submit करती है। कोई HTTP client इसे हल नहीं कर सकता। आपको एक असली browser चाहिए, और browser को असली दिखना चाहिए (कोई navigator.webdriver = true नहीं, कोई गायब गुण नहीं)।
Bot Management स्तर पर, Cloudflare एक निरंतर चलने वाली script के ज़रिए mouse movement, scroll velocity, click timing, और keystroke dynamics इकट्ठा करता है। एक headless browser जो page load करता है और कभी mouse हिलाए बिना तुरंत scrape करने लगता है, सेकंडों में पकड़ा जाता है। असली उपयोगकर्ता अनियमित रूप से चलते हैं, रुकते हैं, और दोबारा पढ़ते हैं। Bots रैखिक रूप से scroll करते हैं और pixel-perfect click करते हैं।
वे शॉर्टकट tools जिन्होंने 2021-2024 के scraping को चलाया, सब एक ही विफलता-मोड साझा करते हैं: वे दिखने वाली सतह को patch करते हैं पर अंतर्निहित TLS stack को नहीं।
| Tool | यह क्या patch करता है | यह 2026 में क्यों विफल होता है |
|---|---|---|
cloudscraper | JS challenge solver (legacy) | Cloudflare 2023 में Turnstile पर चला गया; legacy challenges deprecated |
undetected-chromedriver | Selenium leak flags को patch करता है | JA4 अब भी अंतर्निहित chromedriver TLS से लीक होता है; navigator.webdriver 40+ संकेतों में से सिर्फ़ एक |
selenium-stealth | spoofed JS गुण inject करता है | Cloudflare C++ परत से पढ़ता है, JS से नहीं; spoof असंगत होने के कारण पकड़ में आ जाता है |
FlareSolverr | एक-बार के challenge solve के लिए Chromium को wrap करता है | cf_clearance solver IP से बँधा; ताज़ा proxy token को तुरंत अमान्य कर देता है |
Stock puppeteer-extra-plugin-stealth | ~17 detection points को patch करता है | Cloudflare ने 2024-2025 में ~12 नई जाँचें जोड़ीं जो plugin में शामिल नहीं |
पैटर्न स्पष्ट है: जो tools एक असली browser को wrap करते हैं और ज्ञात leaks को patch करते हैं, महीनों के भीतर हथियार-दौड़ हार जाते हैं। जो tools एक browser के TLS stack का अनुकरण करते हैं (curl_cffi, tls-client) ज़िंदा रहे हैं क्योंकि वे wire के ज़्यादा क़रीब बैठते हैं।
2026 में काम करने वाले एक bypass को चारों परतें चाहिए। किसी एक को भी छोड़ने से सफलता दर इकाई अंकों तक गिर जाती है।
Cloudflare Pro या उससे ऊपर चलाने वाली किसी भी साइट के लिए यह बिना-समझौते वाली बात है। IP प्रतिष्ठा filter TLS handshake पूरा होने से पहले datacenter ASNs को अस्वीकार कर देता है। एक sticky session वाली residential proxy कम से कम 10 मिनट के लिए इस्तेमाल करें ताकि cf_clearance cookie बची रहे।
curl_cffi (Python) या tls-client (Go/Python) इस्तेमाल करें। दोनों एक संशोधित BoringSSL से link होते हैं जो Chrome के ठीक-ठीक cipher क्रम, extension सूची, और 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-दर-byte मेल खाए। JA4 hash एक असली Chrome 124 install के समान होगा। इसे एक residential proxy के साथ जोड़ें और आप पहले दो filters पास कर लेते हैं।
जब आप impersonate इस्तेमाल करते हैं तो curl_cffi headers को अपने-आप Chrome के क्रम में सेट करता है। अगर आप custom headers जोड़ते हैं, तो उन्हें बीच में डालने के बजाय अंत में जोड़ें। ऐसे headers सेट करने से बचें जो असली Chrome नहीं भेजता (जैसे एक सामान्य navigation पर X-Requested-With)।
Accept-Language के लिए, इसे proxy की भौगोलिक स्थिति से मिलाएँ। Accept-Language: zh-CN,zh;q=0.9 भेजने वाली एक US residential IP एक छोटा पर असली संकेत है। US IPs के लिए en-US,en;q=0.9 इस्तेमाल करें, जर्मन IPs के लिए de-DE,de;q=0.9, इत्यादि। यह उन कुछ संकेतों में से एक है जिसे आप मुफ़्त में ठीक कर सकते हैं।
अगर target एक Managed Challenge trigger करता है (आप 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 सक्षम के साथ 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 |
ध्यान देने योग्य दो निष्कर्ष:
यह वह पैटर्न है जो हम उन ग्राहकों को सुझाते हैं जो 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 नहीं किया जा सकता। अगर आप ये संकेत देखते हैं, तो ऐसे bypass पर बजट जलाने के बजाय रणनीति बदलें (एक API इस्तेमाल करें, साइट मालिक के साथ साझेदारी करें, या डेटा ख़रीदें) जो कभी स्थिर नहीं होगा।
| Target स्तर | नुस्ख़ा | अपेक्षित सफलता दर |
|---|---|---|
| CF Free / Pro (कोई 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 240+ देशों में 90M+ IPs, 60 मिनट तक sticky sessions, और $2/GB से शुरू होती country-स्तर targeting के साथ dynamic residential proxies देता है। mobile IPs के लिए, dynamic mobile proxies देखें। दोनों curl_cffi, tls-client, Playwright, Puppeteer, Selenium, और HTTP/SOCKS5 proxies का समर्थन करने वाले किसी भी HTTP client के साथ सीधे काम करते हैं।
संबंधित पठन: Sticky vs Rotating Proxy Sessions session configuration को गहराई से कवर करता है। Proxies for AI Agents उस AI agent use case को समझाता है जो Cloudflare bypass workflow से काफ़ी हद तक मेल खाता है।
500MB मुफ़्त ट्रैफ़िक पाएँ। प्रतिबद्ध होने से पहले अपने target के विरुद्ध curl_cffi + sticky residential combo चलाएँ।
मुफ़्त परीक्षण शुरू करेंनए यूज़र्स को साइन अप पर 500MB मिलते हैं, साथ ही पहली रिचार्ज पर बोनस। सीमित समय की पेशकश।