Chuyển đến nội dung

Proxy và geoip

Cho trình duyệt đi qua proxy của riêng bạn, kể cả SOCKS5 có tên người dùng và mật khẩu trên bản build có giấy phép, và để geoip khớp múi giờ, ngôn ngữ và địa chỉ WebRTC với IP đầu ra của proxy.

Tự khớp theo khu vực của proxy (geoip)

Truyền geoip cùng với proxy, SDK sẽ xác định IP thoát của proxy — tra trong cơ sở dữ liệu offline geoip-all-in-one — rồi đặt múi giờ + ngôn ngữ chính của navigator + Accept-Language + IP WebRTC nhất quán cho khu vực đó. Không còn phải tự chọn múi giờ khớp với từng proxy nữa:

from clearcote import launch

browser = launch(
    fingerprint="user-7423",
    proxy={"server": "http://host:8080", "username": "u", "password": "p"},
    geoip=True,  # timezone + language auto-matched to the proxy's region
)

Nó cũng đặt vị trí địa lý (geolocation) và toàn bộ danh sách navigator.languages cho khu vực đó, hoạt động qua proxy HTTP và SOCKS5 (kể cả proxy có thông tin xác thực), và có trong cả ba SDK (Geoip = true trong .NET). Lần chạy đầu tiên sẽ tải cơ sở dữ liệu về (khoảng 50 MB). Nếu không xác định được khu vực, quá trình khởi chạy dừng lại với GeoipError thay vì lặng lẽ khởi động với đồng hồ và ngôn ngữ của máy này; hãy đặt cả timezone lẫn acceptLanguage nếu vẫn muốn khởi chạy. Việc tra cứu có tối đa 20 giây (CLEARCOTE_GEOIP_TIMEOUT_SECONDS); trong .NET, lỗi là GeoipException. Nếu không có geoip hoặc timezone được đặt tường minh, múi giờ sẽ theo ngôn ngữ — en-US nghĩa là New York, kể cả khi đi qua một proxy ở Đức.

Muốn tự đặt? Dùng acceptLanguage (Node) / accept_language (Python), ví dụ "en-US,en" — tùy chọn này đặt header Accept-Language, toàn bộ mảng navigator.languages và navigator.language — và Intl / toLocaleString cũng theo giá trị đó.

SOCKS5 có thông tin xác thực

Chromium gốc hoàn toàn không xác thực được với proxy SOCKS5 — nó không triển khai bước thương lượng con username/password (sub-negotiation) — nên cách xoay xở thường thấy là dùng một relay cục bộ giữ thông tin xác thực. Bản build có giấy phép triển khai việc này ngay trong engine (RFC 1929), nên không cần relay. Truyền username và password dưới dạng các trường riêng hoặc ngay trong địa chỉ (socks5://user:pass@host:port); cách nào thì SDK cũng chuyển chúng cho engine. Thông tin xác thực nằm trong địa chỉ cần SDK 0.31.1 trở lên: các SDK cũ hơn để Playwright làm rơi mất chúng, và proxy không nhận được thông tin đăng nhập nào.

from clearcote import launch_persistent_context

ctx = launch_persistent_context(
    "./profile",
    proxy={"server": "socks5://proxy.example.net:1080", "username": "user", "password": "pass"},
)
page = ctx.pages[0] if ctx.pages else ctx.new_page()
page.goto("https://api.ipify.org?format=json")   # confirm the exit IP is the proxy's

Cần bản build có giấy phép (Miễn phí với GitHub hoặc Pro, engine 151 r14 trở lên); bản build mở không xác thực được với proxy SOCKS5, nên hãy dùng relay cục bộ hoặc proxy HTTP với bản build này.

Luôn kiểm tra địa chỉ thoát trước khi tin tưởng một phiên. Một proxy âm thầm fail open (khi lỗi thì để traffic đi thẳng) sẽ gửi traffic từ chính IP của bạn, và mọi biện pháp phòng ngừa khác trở nên vô nghĩa. Hãy kiểm tra một lần lúc khởi chạy bằng một dịch vụ trả về địa chỉ IP của bạn, thay vì cứ mặc định là ổn.