curl-impersonate là một bản dựng curl đặc biệt có thể mô phỏng các trình duyệt web phổ biến như Chrome, Edge, Safari và Firefox
- Thực hiện bắt tay TLS và HTTP giống hệt trình duyệt thật
- Có thể dùng như công cụ dòng lệnh hoặc tích hợp dưới dạng thư viện
- Tầm quan trọng
- Khi một HTTP client truy cập website dùng TLS, nó sẽ thực hiện bắt tay TLS, và trong quá trình này có thể bị nhận diện đặc tính của client
curl-impersonate làm cho quá trình bắt tay này giống hệt trình duyệt thật để dịch vụ web không thể nhận diện client
- Triển khai kỹ thuật
- Biên dịch curl bằng BoringSSL, thư viện TLS của Google.
- Chỉnh sửa nhiều phần mở rộng TLS và tùy chọn SSL.
- Thay đổi thiết lập kết nối HTTP/2.
- Chạy curl bằng các cờ không tiêu chuẩn.
- Trình duyệt được hỗ trợ
- Có thể mô phỏng nhiều phiên bản trình duyệt như Chrome, Edge, Safari và Firefox.
- Có sẵn script cho từng trình duyệt.
- Cách dùng cơ bản
- Có các wrapper script để chạy
curl-impersonate cho từng trình duyệt được hỗ trợ.
- Ví dụ:
curl_chrome123 https://www.wikipedia.org
- Cách dùng nâng cao
- Có thể cấu hình qua API bằng thư viện
libcurl-impersonate.
- Có thể thay thế thư viện lúc chạy bằng biến môi trường
CURL_IMPERSONATE.
- Cài đặt
- Các binary biên dịch sẵn cho Windows, Linux và macOS được cung cấp trên trang GitHub Releases.
- Cũng có thể sử dụng thông qua Docker image.
- Kho lưu trữ này là một fork năng động hơn của
curl-impersonate, với các khác biệt chính sau
- Hỗ trợ Encrypted Client Hello (ECH): Bổ sung tính năng ECH được giới thiệu trong Chrome 119.
- Hỗ trợ nén ZSTD: Hỗ trợ giao thức nén ZSTD được giới thiệu trong Chrome 123.
- Hỗ trợ đường cong X25519Kyber768: Bổ sung đường cong mã hóa mới được giới thiệu trong Chrome 124.
- Mở rộng tùy chọn dấu vân tay Akamai HTTP/2: Tăng cường các tùy chọn dấu vân tay HTTP/2, bao gồm cả Safari.
- Nâng cấp lên phiên bản curl mới nhất: Cập nhật lên curl 8.7.1.
- Có thể cấu hình thứ tự phần mở rộng TLS và GREASE: Bổ sung tùy chọn bật/tắt GREASE và sắp xếp thứ tự phần mở rộng TLS.
- Chuẩn bị hỗ trợ trình duyệt nền tảng Webkit và Gecko: Đang thực hiện bản nhị phân hợp nhất cho Chrome và Firefox.
1 bình luận
Ý kiến trên Hacker News
Có một dự án cung cấp API tương tự
requeststhông qua Python binding. Điều này giúp thực hiện các yêu cầu HTTP dễ dàng mà không cần chạy toàn bộ stack trình duyệtTrên một số trang web nhất định, cần đến cơ chế phát hiện trình duyệt dựa trên JavaScript. Ngay cả
puppeteer-extra-plugin-stealthcũng có thể bị vô hiệu hóaScript build khá phức tạp. Dùng autotools nhưng phải build trong thư mục con
makehoạt động tốt hơn-Werror. Danh sách dependency không đầy đủlibc++-XX-devvàlibc++abi-XX-dev. Quá trình cài đặt còn hơi thiếu sótĐã tạo một dự án tương tự cho Python. Đang tìm người có thể hỗ trợ build trên Windows
Chỉ một số ít website dùng JA3/JA4 fingerprinting. Cũng có những trang dùng kỹ thuật nâng cao để liên kết header với fingerprint
Dùng
ja3proxyđể expose HTTP proxy thông quautls. Không có tính năng đặc biệt nào cho HTTP/2Trong ngôn ngữ Go, gói
tls-clientlà thứ thường được dùng nhấtCâu chuyện và sự thú vị liên quan đến việc các AI scraper farm DDoS website
Tôi nghĩ những dự án như thế này không nên được công bố. Kẻ địch có thể đang ở giữa chúng ta
Nếu cần đọc dữ liệu từ một số website nhất định, chúng dùng thông tin handshake để ngăn không cho phần mềm đọc được