Bạn đã mua IP residential sạch, bạn xoay vòng chúng hoàn hảo, vậy mà vẫn nhận 403 ngay từ yêu cầu đầu tiên. Vấn đề không nằm ở IP — mà ở chính TLS handshake của bạn. TLS fingerprinting cho phép máy chủ nhận diện thư viện client trước khi đọc dù chỉ một byte của yêu cầu HTTP. Bài viết này giải thích JA3/JA4, cho thấy vì sao requests của Python dễ bị phát hiện đến mức tầm thường, và cung cấp mã chạy được để giả lập các trình duyệt thật bằng curl_cffi và tls-client.
Khi bất kỳ client nào mở một kết nối HTTPS, nó gửi đi một ClientHello quảng bá phiên bản TLS, các cipher suite, các extension, các đường cong elliptic, và thứ tự của tất cả những thứ đó. Thứ tự ấy đặc trưng đến đáng kinh ngạc cho thư viện đã tạo ra nó. Băm nó lại bạn được một fingerprint JA3 (hoặc bản mới hơn, mạnh hơn là JA4).
Chrome tạo ra một fingerprint. Firefox một fingerprint khác. requests của Python (xây trên urllib3 và OpenSSL) tạo ra một fingerprint hét lên "tự động hóa" — và nó giống hệt nhau trên hàng triệu bot. Các hệ thống chống bot duy trì một danh sách chặn các fingerprint này. Dù IP của bạn residential đến mấy, một JA3 bị biết là của bot vẫn bị gắn cờ.
Trước khi sửa bất cứ điều gì, hãy đo nó. Gửi một yêu cầu từ scraper của bạn tới trình kiểm tra fingerprint JA3/JA4 miễn phí của JIBAO và so sánh với những gì một Chrome thật hiển thị. Nếu các hash JA3 khác nhau, mục tiêu có thể phân biệt bạn với một con người — và Cloudflare cũng vậy.
requests và httpx giao TLS cho OpenSSL của hệ thống. Bạn có thể thay đổi header và cả User-Agent suốt ngày, nhưng handshake bên dưới vẫn là của OpenSSL, không phải của Chrome. Giả mạo header mà không giả mạo handshake là lý do phổ biến nhất khiến tình huống "tôi đã sao chép các header của trình duyệt mà nó vẫn chặn tôi" xảy ra. Bạn cần một client mô phỏng đúng ngăn xếp TLS thực của trình duyệt.
curl_cffi liên kết với curl-impersonate, một bản build của curl tái tạo các fingerprint TLS và HTTP/2 của trình duyệt thật. Chỉ một tham số và handshake của bạn trông như Chrome:
# pip install curl_cffi
from curl_cffi import requests
# impersonate a real Chrome TLS + HTTP/2 fingerprint
r = requests.get(
"https://tls.browserleaks.com/json",
impersonate="chrome131",
)
print(r.json()["ja3_hash"]) # now matches real Chrome
API phản chiếu requests, nên việc di chuyển một scraper hiện có hầu hết chỉ là thay đổi một dòng import. Các mục tiêu được hỗ trợ bao gồm các bản Chrome, Edge, Safari và Firefox gần đây — chọn một cái và giữ nó cập nhật, vì fingerprint xoay vòng khi trình duyệt cập nhật.
Khớp fingerprint và xoay vòng IP bổ trợ cho nhau, không phải thay thế nhau. Dùng cả hai: một handshake cấp trình duyệt qua một IP residential sạch mới là thứ thực sự lọt qua:
from curl_cffi import requests
PROXY = "socks5h://USERNAME:[email protected]:10001"
r = requests.get(
"https://example.com/protected",
impersonate="chrome131",
proxies={"http": PROXY, "https": PROXY},
timeout=30,
)
print(r.status_code)
tls-client (một wrapper Python trên triển khai uTLS bằng Go) là một lựa chọn vững chắc khác, với một thư viện lớn các profile có tên:
# pip install tls-client
import tls_client
session = tls_client.Session(
client_identifier="chrome_120",
random_tls_extension_order=True,
)
session.proxies = {
"http": "socks5h://USERNAME:[email protected]:10001",
"https": "socks5h://USERNAME:[email protected]:10001",
}
r = session.get("https://example.com/protected")
print(r.status_code)
random_tls_extension_order=True xáo trộn thứ tự extension để tránh một fingerprint tĩnh, tái sử dụng được — hữu ích trước các hệ thống theo dõi JA3 khớp chính xác theo thời gian.
Một số mục tiêu kiểm tra các tín hiệu thực thi JavaScript (canvas, WebGL, định thời sự kiện) mà không một HTTP client nào tái tạo được. Ở đó, hãy điều khiển một trình duyệt thật thay thế — xem dùng proxy với Playwright và Puppeteer kèm stealth. Đánh đổi là chi phí và tốc độ: các HTTP client như curl_cffi rẻ hơn nhiều cho mỗi yêu cầu, nên hãy dùng chúng ở bất cứ đâu chúng đủ dùng và để dành các trình duyệt đầy đủ cho những mục tiêu khó nhất.
curl_cffi (impersonate=) hoặc tls-client — chỉ riêng header là không đủ.TLS fingerprinting là lớp còn thiếu trong hầu hết các câu chuyện "IP sạch mà vẫn bị chặn". Sửa handshake, giữ IP residential, và tỷ lệ thành công tăng vọt. Để có toàn bộ ngăn xếp chống lại WAF khó nhằn nhất, đọc công thức vượt Cloudflare 2026.
Nhận 500MB lưu lượng miễn phí và IP residential để ghép với các fingerprint TLS cấp trình duyệt.
Bắt Đầu Dùng Thử Miễn PhíNgười dùng mới nhận 500MB khi đăng ký, cùng tiền thưởng cho lần nạp đầu tiên. Ưu đãi có thời hạn.