ইন্টারনেটে "কীভাবে Cloudflare বাইপাস করবেন" সংক্রান্ত বেশিরভাগ টিউটোরিয়াল ২০২৪ সালের শেষের দিকে কাজ করা বন্ধ করে দিয়েছে। এর কারণ এই নয় যে Cloudflare নতুন প্রতিরক্ষা যোগ করেছে। আসল কারণ হলো পুরোনো প্রতিরক্ষাগুলো, অর্থাৎ JA3 ফিঙ্গারপ্রিন্টিং ও মৌলিক হেডার চেক, একটি নতুন প্রজন্ম দিয়ে প্রতিস্থাপিত হয়েছে যা প্রতিটি শর্টকাট ভেঙে দেয়। এই গাইডে ব্যাখ্যা করা হয়েছে ২০২৬ সালে Cloudflare আসলে কী যাচাই করে, কেন cloudscraper, undetected-chromedriver, এবং বেশিরভাগ "stealth" প্লাগইন ব্যর্থ হয়, এবং সেই চার-স্তরের রেসিপি যা এখনও প্রোডাকশনে কাজ করে।
প্রথমেই সৎ সারসংক্ষেপ: কোনো একক কৌশল নেই। নির্ভরযোগ্যভাবে Cloudflare বাইপাস করতে হলে সঠিক IP, সঠিক TLS ফিঙ্গারপ্রিন্ট, সঠিক HTTP/2 ফ্রেম অর্ডারিং, এবং (Bot Management টিয়ারের জন্য) একটি আসল ব্রাউজার দরকার। এর যেকোনো একটি ভুল করলে আপনার অনুরোধ মূল সার্ভারে পৌঁছানোর আগেই edge ফিল্টারে ব্যর্থ হয়ে যাবেন।
Cloudflare-এর বট সনাক্তকরণ edge-এ ফিল্টারের একটি পাইপলাইন হিসেবে চলে। প্রতিটি অনুরোধ ক্রমানুসারে এগুলোর মধ্য দিয়ে যায়। যে ফিল্টার সবার আগে প্রত্যাখ্যান করে সেটিই জয়ী হয়, অর্থাৎ কোনো ফিঙ্গারপ্রিন্ট বা হেডার পরীক্ষা করার আগেই কেবল IP রেপুটেশনেই একটি অনুরোধ ব্যর্থ হতে পারে।
এটি প্রথম এবং সবচেয়ে সস্তা চেক। Cloudflare ASN (Autonomous System Number) দিয়ে কী করা একটি ডেটাবেস রক্ষণাবেক্ষণ করে। সুপরিচিত ক্লাউড প্রোভাইডারদের অন্তর্গত ASN (AWS AS16509, GCP AS15169, Azure AS8075, OVH AS16276, DigitalOcean AS14061, Hetzner AS24940, Vultr AS20473) সর্বোচ্চ যাচাই-বাছাইয়ের মুখোমুখি হয়। এমনকি একটি নিখুঁত ব্রাউজার-গ্রেড ফিঙ্গারপ্রিন্ট থাকলেও, এসব ASN থেকে উৎপন্ন একটি অনুরোধকে নির্দোষ প্রমাণিত না হওয়া পর্যন্ত দোষী হিসেবে গণ্য করা হয়।
রেসিডেনশিয়াল ASN (Comcast AS7922, Verizon AS701, China Telecom AS4134, BT AS2856) বৈধ বলে অনুমান করা হয়। একটি আনাড়ি Python ফিঙ্গারপ্রিন্টসহ রেসিডেনশিয়াল IP থেকে আসা একটি অনুরোধও পাস করতে পারে, যেখানে একটি নিখুঁত Chrome ফিঙ্গারপ্রিন্টসহ ডেটাসেন্টার IP থেকে আসা একটি অনুরোধকে চ্যালেঞ্জ বা ব্লক করা হবে।
JA4 হলো JA3-এর ২০২৩ সালের উত্তরসূরি, যা FoxIO প্রকাশ করেছে। এটি নির্দিষ্ট TLS ClientHello ফিল্ডগুলো হ্যাশ করে: TLS সংস্করণ, সাইফার স্যুট (ক্রম অনুসারে), এক্সটেনশন (ক্রম অনুসারে), ALPN প্রোটোকল, সিগনেচার অ্যালগরিদম, এবং সমর্থিত গ্রুপ। আউটপুটটি একটি নির্দিষ্ট ফিঙ্গারপ্রিন্ট যেমন t13d1516h2_8daaf6152771_b1ff8ab2d16f।
আসল Chrome 124 একটি নির্দিষ্ট JA4 তৈরি করে। আসল Firefox 124 একটি ভিন্ন JA4 তৈরি করে। Python-এর requests লাইব্রেরি (যা urllib3 ও OpenSSL ব্যবহার করে) এমন একটি JA4 তৈরি করে যা কোনো আসল ব্রাউজার কখনো নির্গত করে না, কারণ সাইফার অর্ডার ও এক্সটেনশন তালিকা Chrome বা Firefox কোনোটির সাথেই মেলে না। Cloudflare কোনো HTTP হেডার পার্স করার আগেই এই প্যাটার্ন চিহ্নিত করে।
এর তাৎপর্য: প্রতিটি লাইব্রেরি যা সিস্টেমের OpenSSL বা স্টক Python TLS ব্যবহার করে তা সনাক্তযোগ্য। এর মধ্যে রয়েছে requests, aiohttp, httpx (ডিফল্ট কনফিগ), এবং এগুলোর উপর নির্মিত যেকোনো "bypass" র্যাপার।
HTTP/2 সংযোগ settings ফ্রেম, window update, priority ফ্রেম, এবং headers ফ্রেম বহন করে। ব্রাউজার এগুলো একটি নির্দিষ্ট ক্রমে নির্দিষ্ট মান সহ পাঠায়। Chrome 124 এই সঠিক মান সহ একটি প্রাথমিক SETTINGS ফ্রেম পাঠায়, তারপর একটি WINDOW_UPDATE, তারপর HEADERS। HTTP/2 সক্ষম করা Python-এর httpx একটি ভিন্ন settings পেলোড পাঠায় এবং Chrome যে priority ফ্রেম অন্তর্ভুক্ত করে তা এড়িয়ে যায়।
HTTP/2 সিউডো-হেডার অর্ডারও পরিচয় ফাঁস করে। Chrome :method, :authority, :scheme, :path এই ক্রমে পাঠায়। Firefox :method, :path, :authority, :scheme পাঠায়। বেশিরভাগ Python ও Go লাইব্রেরি এগুলোকে বর্ণানুক্রমিকভাবে সিরিয়ালাইজ করে। Cloudflare ঘোষিত User-Agent-এর জন্য প্রত্যাশিত প্যাটার্নের সাথে ক্রমটি মেলায় এবং অমিলগুলো চিহ্নিত করে।
HTTP/1.1 হেডার সন্নিবেশ ক্রম সংরক্ষণ করে। আসল Chrome হেডারগুলো একটি নির্দিষ্ট ক্রমে পাঠায়: 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 এগুলোকে পুনর্বিন্যাস করে এবং কখনো কখনো ভিন্নভাবে বড় হাতের অক্ষরে লেখে। এমনকি সঠিক ক্রমে ম্যানুয়ালি হেডার সেট করলেও সাহায্য হয় না কারণ অন্তর্নিহিত লাইব্রেরি এগুলোকে পুনরায় সাজায়।
যদি পূর্ববর্তী ফিল্টারগুলো পাস হয় কিন্তু স্কোর তবুও সন্দেহজনক থাকে, Cloudflare একটি JavaScript চ্যালেঞ্জ পরিবেশন করে। স্ক্রিপ্টটি ব্রাউজার পরিবেশের মান (canvas হ্যাশ, WebGL রেন্ডারার, audio context, navigator প্রপার্টি, timing পরিমাপ) থেকে একটি টোকেন গণনা করে এবং XHR-এর মাধ্যমে তা জমা দেয়। কোনো HTTP ক্লায়েন্ট এটি সমাধান করতে পারে না। আপনার একটি আসল ব্রাউজার দরকার, এবং ব্রাউজারটিকে আসল দেখাতে হবে (কোনো navigator.webdriver = true নয়, কোনো অনুপস্থিত প্রপার্টি নয়)।
Bot Management টিয়ারে, Cloudflare একটি ক্রমাগত চলমান স্ক্রিপ্টের মাধ্যমে মাউস মুভমেন্ট, স্ক্রল ভেলোসিটি, ক্লিক টাইমিং, এবং কীস্ট্রোক ডায়নামিক্স সংগ্রহ করে। একটি হেডলেস ব্রাউজার যা পেজটি লোড করে এবং কখনো মাউস না নাড়িয়েই অবিলম্বে স্ক্র্যাপ করে তা কয়েক সেকেন্ডের মধ্যে সনাক্ত হয়। আসল ব্যবহারকারীরা অনিয়মিতভাবে নড়াচড়া করে, থামে, এবং পুনরায় পড়ে। বট রৈখিকভাবে স্ক্রল করে এবং পিক্সেল-পারফেক্ট ক্লিক করে।
২০২১-২০২৪ সালের স্ক্র্যাপিংকে শক্তি জোগানো শর্টকাট টুলগুলো সবাই একই ব্যর্থতার ধরন ভাগ করে নেয়: তারা দৃশ্যমান পৃষ্ঠতল প্যাচ করে কিন্তু অন্তর্নিহিত TLS স্ট্যাক করে না।
| টুল | এটি যা প্যাচ করে | কেন এটি ২০২৬ সালে ব্যর্থ হয় |
|---|---|---|
cloudscraper | JS চ্যালেঞ্জ সলভার (লিগ্যাসি) | Cloudflare ২০২৩ সালে Turnstile-এ স্থানান্তরিত হয়েছে; লিগ্যাসি চ্যালেঞ্জ অবচয়িত |
undetected-chromedriver | Selenium লিক ফ্ল্যাগ প্যাচ করে | JA4 এখনও অন্তর্নিহিত chromedriver TLS থেকে ফাঁস হয়; navigator.webdriver ৪০+ সংকেতের মধ্যে মাত্র একটি |
selenium-stealth | স্পুফড JS প্রপার্টি ইনজেক্ট করে | Cloudflare C++ স্তর থেকে পড়ে, JS থেকে নয়; স্পুফ অসামঞ্জস্যপূর্ণ হিসেবে সনাক্তযোগ্য |
FlareSolverr | একবারের চ্যালেঞ্জ সমাধানের জন্য Chromium মোড়ায় | cf_clearance সলভার IP-এর সাথে আবদ্ধ; নতুন প্রক্সি টোকেনকে অবিলম্বে অকার্যকর করে |
স্টক puppeteer-extra-plugin-stealth | ~১৭টি সনাক্তকরণ পয়েন্ট প্যাচ করে | Cloudflare ২০২৪-২০২৫ সালে ~১২টি নতুন চেক যোগ করেছে যা প্লাগইন দ্বারা আচ্ছাদিত নয় |
প্যাটার্নটি স্পষ্ট: যেসব টুল একটি আসল ব্রাউজার মোড়ায় এবং পরিচিত লিক প্যাচ করে সেগুলো কয়েক মাসের মধ্যে অস্ত্র প্রতিযোগিতায় হেরে যায়। যেসব টুল একটি ব্রাউজারের TLS স্ট্যাক সিমুলেট করে (curl_cffi, tls-client) সেগুলো টিকে আছে কারণ তারা তারের কাছাকাছি বসে।
২০২৬ সালে কাজ করে এমন একটি বাইপাসের জন্য চারটি স্তরই দরকার। যেকোনো একটি বাদ দিলে সাফল্যের হার এক অঙ্কে নেমে যায়।
Cloudflare Pro বা তার উপরে চালানো যেকোনো সাইটের জন্য এটি অনিবার্য। IP রেপুটেশন ফিল্টার TLS হ্যান্ডশেক সম্পূর্ণ হওয়ার আগেই ডেটাসেন্টার ASN প্রত্যাখ্যান করে। কমপক্ষে ১০ মিনিটের জন্য একটি sticky সেশন সহ একটি রেসিডেনশিয়াল প্রক্সি ব্যবহার করুন যাতে cf_clearance কুকি টিকে থাকে।
curl_cffi (Python) বা tls-client (Go/Python) ব্যবহার করুন। উভয়ই একটি পরিবর্তিত BoringSSL-এর সাথে লিঙ্ক করে যা Chrome-এর সঠিক সাইফার অর্ডার, এক্সটেনশন তালিকা, এবং 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" প্যারামিটারটি TLS স্ট্যাক অদলবদল করে যাতে ClientHello বাইট-বাই-বাইট Chrome 124-এর সাথে মেলে। JA4 হ্যাশটি একটি আসল Chrome 124 ইনস্টলের সাথে অভিন্ন হবে। এটিকে একটি রেসিডেনশিয়াল প্রক্সির সাথে জোড়া দিন এবং আপনি প্রথম দুটি ফিল্টার পাস করবেন।
আপনি যখন impersonate ব্যবহার করেন তখন curl_cffi স্বয়ংক্রিয়ভাবে Chrome-এর ক্রমে হেডার সেট করে। আপনি যদি কাস্টম হেডার যোগ করেন, মাঝখানে সন্নিবেশ করার পরিবর্তে শেষে সংযুক্ত করুন। এমন হেডার সেট করা এড়িয়ে চলুন যা আসল Chrome পাঠাবে না (যেমন, একটি স্বাভাবিক নেভিগেশনে X-Requested-With)।
Accept-Language-এর জন্য, এটিকে প্রক্সির ভৌগোলিক অবস্থানের সাথে মেলান। একটি US রেসিডেনশিয়াল IP Accept-Language: zh-CN,zh;q=0.9 পাঠানো একটি ছোট কিন্তু আসল সংকেত। US IP-এর জন্য en-US,en;q=0.9, জার্মান IP-এর জন্য de-DE,de;q=0.9, ইত্যাদি ব্যবহার করুন। এটি এমন কয়েকটি সংকেতের একটি যা আপনি বিনামূল্যে ঠিক করতে পারেন।
যদি টার্গেট একটি Managed Challenge ট্রিগার করে (আপনি রেসপন্স বডিতে একটি CF চ্যালেঞ্জ পেজ দেখেন), curl_cffi একাই এটি সমাধান করতে পারে না। প্যাচ করা 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()
স্টক playwright-এর পরিবর্তে rebrowser-playwright ব্যবহার করুন। এটি CDP রানটাইম লিক (Runtime.enable, পেজে CDP কমান্ডের উন্মোচন) প্যাচ করে যা Cloudflare হেডলেস অটোমেশন সনাক্ত করতে পড়ে। চ্যালেঞ্জ পাস হওয়ার পর, কুকি থেকে cf_clearance বের করুন এবং প্রকৃত স্ক্র্যাপিং লুপের জন্য এটি curl_cffi-কে ফেরত দিন। ব্রাউজারটি প্রতি অনুরোধে নয়, প্রতি সেশনে একবার দরকার হয়।
সবচেয়ে সস্তা প্রক্সি ব্যবহারের প্রবণতা Cloudflare-সুরক্ষিত সাইটে প্রায় সবসময়ই ভুল। আসল সংখ্যা দিয়ে অঙ্কটি দেখুন।
অনুমান: গড় HTML পেজ ৫০০KB, মোট ১,০০,০০০ পেজ স্ক্র্যাপিং, টার্গেট Cloudflare Pro সহ Bot Fight Mode সক্ষম ব্যবহার করে।
| সেটআপ | ব্যান্ডউইথ খরচ | সাফল্যের হার | প্রতি সাফল্যে অনুরোধ | মোট খরচ | প্রতি পেজে খরচ |
|---|---|---|---|---|---|
| ডেটাসেন্টার $0.8/GB + requests | $0.0005 / req | 0.5% | 200 | $10,000 | $0.10 |
| ডেটাসেন্টার $0.8/GB + curl_cffi | $0.0005 / req | 3% | 33 | $1,650 | $0.0165 |
| রেসিডেনশিয়াল $2/GB + requests | $0.0033 / req | 40% | 2.5 | $825 | $0.0083 |
| রেসিডেনশিয়াল $2/GB + curl_cffi | $0.0033 / req | 92% | 1.09 | $360 | $0.0036 |
| রেসিডেনশিয়াল $2/GB + Playwright (rebrowser) | $0.017 / req (assets + JS) | 96% | 1.04 | $1,700 | $0.017 |
উল্লেখযোগ্য দুটি ফলাফল:
এটি সেই প্যাটার্ন যা আমরা গ্রাহকদের সুপারিশ করি যারা Cloudflare-সুরক্ষিত টার্গেট বড় পরিসরে স্ক্র্যাপ করে। এটি 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 ডিপ্লয়মেন্ট কোনো যুক্তিসঙ্গত খরচে বাইপাস করা যায় না। আপনি যদি এসব সংকেত দেখেন, কৌশল পরিবর্তন করুন (একটি API ব্যবহার করুন, সাইটের মালিকের সাথে অংশীদারিত্ব করুন, বা ডেটা কিনুন) এমন একটি বাইপাসে বাজেট পোড়ানোর পরিবর্তে যা কখনো স্থিতিশীল হবে না।
| টার্গেট টিয়ার | রেসিপি | প্রত্যাশিত সাফল্যের হার |
|---|---|---|
| CF Free / Pro (Bot Fight নেই) | ডেটাসেন্টার + curl_cffi | 60-75% |
| CF Free / Pro + Bot Fight Mode | রেসিডেনশিয়াল + curl_cffi | 85-93% |
| CF Business | রেসিডেনশিয়াল + curl_cffi + মাঝে মাঝে Playwright | 80-90% |
| CF Business + Turnstile | রেসিডেনশিয়াল + rebrowser-playwright (প্রতি অনুরোধ) | 70-85% |
| CF Enterprise + Bot Management | মোবাইল রেসিডেনশিয়াল + rebrowser + আচরণ সিমুলেশন | 30-60% |
| CF Enterprise + Bot Management + কাস্টম WAF | স্ক্র্যাপ করবেন না; API বা অংশীদারিত্ব অনুসরণ করুন | <10% |
JIBAO Proxy ২৪০+ দেশ জুড়ে ৯০M+ IP, ৬০ মিনিট পর্যন্ত sticky সেশন, এবং $2/GB থেকে শুরু হওয়া দেশ-স্তরের টার্গেটিং সহ ডায়নামিক রেসিডেনশিয়াল প্রক্সি অফার করে। মোবাইল IP-এর জন্য, ডায়নামিক মোবাইল প্রক্সি দেখুন। উভয়ই curl_cffi, tls-client, Playwright, Puppeteer, Selenium, এবং HTTP/SOCKS5 প্রক্সি সমর্থন করে এমন যেকোনো HTTP ক্লায়েন্টের সাথে বাক্সের বাইরে কাজ করে।
সম্পর্কিত পঠন: Sticky vs Rotating Proxy Sessions সেশন কনফিগারেশন গভীরভাবে আলোচনা করে। Proxies for AI Agents AI এজেন্ট ব্যবহারের ক্ষেত্রটি ব্যাখ্যা করে যা Cloudflare বাইপাস ওয়ার্কফ্লোর সাথে ব্যাপকভাবে ওভারল্যাপ করে।
500MB ফ্রি ট্রাফিক নিন। প্রতিশ্রুতিবদ্ধ হওয়ার আগে আপনার টার্গেটের বিরুদ্ধে curl_cffi + sticky রেসিডেনশিয়াল সংমিশ্রণটি চালান।
ফ্রি ট্রায়াল শুরু করুননতুন ব্যবহারকারীরা নিবন্ধনের সময় 500MB পান, সাথে প্রথম রিচার্জে বোনাস। সীমিত সময়ের অফার।