Tính năng mới
Chỉ cần thiếu một chữ cái. Nhập -contry-de vào username proxy và lỗi chính tả đó xuất hiện rõ ràng, trông hoàn toàn giống như một tùy chọn hợp lệ.
Cổng proxy của FourA sẽ phản hồi trường hợp đó bằng lỗi 400 kèm danh sách tất cả các key hợp lệ. Đó là một chi tiết nhỏ của sản phẩm đã rời giai đoạn beta vào ngày 15 tháng 9: một proxy URL tại các exit node của chúng tôi dành cho mọi client hỗ trợ proxy (trình duyệt, công cụ tải xuống, trình scraper bạn đang chạy), mà không cần viết lệnh gọi API nào. Bạn tạo một proxy user trong Dashboard, dán chuỗi cấu hình, và các tunnel cùng lưu lượng truy cập sẽ được tính vào gói dịch vụ của bạn tương tự như các API request.
Dưới đây là toàn bộ cú pháp và lý do tồn tại của từng quy tắc.
Cách hoạt động
Cổng proxy hoạt động tại proxy.foura.ai:34004 và sử dụng giao thức HTTP CONNECT với xác thực Basic authentication, tới các mục tiêu trên cổng 443 và 80. Thông tin xác thực là các proxy user, được tách biệt có chủ đích khỏi API key của bạn: quá trình bắt tay proxy truyền tải dưới dạng văn bản rõ, và proxy user có thể được cấp mật khẩu mới mà không ảnh hưởng đến tích hợp API của bạn.
Mọi thứ phía sau thông tin xác thực là danh sách các cặp -key-value, theo thứ tự bất kỳ:
# Shared network, a German address, one sticky session for this job
curl -x "http://USERNAME-country-de-session-job42:PASSWORD@proxy.foura.ai:34004" \
https://example.com
# Premium network, an Android address in Germany, held 30 minutes
curl -x "http://USERNAME-network-premium-country-de-os-android-session-s1-lifetime-30:PASSWORD@proxy.foura.ai:34004" \
https://example.com
Shared là các cổng thoát (exit) riêng của FourA: mặc định và đã bao gồm trong gói của bạn. Premium là các địa chỉ dân cư tại nhà, được trừ từ lưu lượng premium trong gói cộng với bất kỳ dung lượng nào bạn mua thêm. Trên mạng shared, -fallback-premium cho phép kết nối chuyển sang exit premium khi exit shared không thể xử lý. Tính năng này tắt trừ khi bạn yêu cầu, và nó chỉ kích hoạt khi hạn mức premium vẫn còn. Việc bật mặc định đồng nghĩa với việc tự ý quyết định dùng hạn mức đó thay bạn.
Country có thể lặp lại, vì vậy -country-de-country-fr tương ứng với phạm vi hai quốc gia. Region, city, mạng theo số AS, thiết bị (windows, android, ios, mac) và lifetime (3 đến 1440 phút) chỉ dành riêng cho premium. Yêu cầu city trên mạng shared sẽ nhận mã 400 thay vì xử lý theo kiểu best effort. Shared được chọn theo country và không có cấp độ chi tiết hơn, vì một bộ lọc city phần lớn không thể đáp ứng thì tệ hơn là không có bộ lọc nào.
-session-<name> (1 đến 32 chữ cái, chữ số hoặc dấu gạch dưới) giúp giữ kết nối cố định (sticky): mọi kết nối mang tên đó đều dùng chung một địa chỉ. Trên shared, địa chỉ được giữ theo cửa sổ trượt 10 phút, do đó nó duy trì chừng nào bạn còn tiếp tục dùng. Trên premium, nó duy trì theo lifetime bạn thiết lập, hoặc theo mặc định của mạng. Bỏ qua session thì mỗi kết nối sẽ đi ra từ một địa chỉ mới.
Tiếp theo là các giá trị mặc định đã lưu. Cấu hình nhắm mục tiêu (targeting) được lưu trên proxy user trong Dashboard sẽ áp dụng cho mọi kết nối của user đó, giúp chuỗi kết nối tinh gọn chỉ còn thông tin xác thực cơ bản. Username vẫn được ưu tiên áp dụng cho kết nối của chính nó, và any sẽ ghi đè giá trị đã lưu: -city-any yêu cầu một key vốn lưu Munich áp dụng cho toàn bộ nước Đức. Các client có thể thêm header vào lệnh CONNECT (curl hỗ trợ việc này với --proxy-header) có thể gửi cùng các tùy chọn như X-Foura-Country, X-Foura-Session và các tùy chọn khác, và header sẽ ghi đè username.
Tác động
Phần lớn những điều này thể hiện qua các câu hỏi bạn không còn phải bận tâm nữa.
Tại sao tôi bị từ chối? Mọi phản hồi từ chối sau khi kiểm tra thông tin xác thực đều mang header X-Foura-Error kèm theo lý do trên một dòng. Mã 400 nêu rõ tùy chọn và các giá trị hợp lệ. Mã 429 cho biết bạn đã chạm đến giới hạn nào trong gói: số tunnel mở cùng lúc, số lượt mở tunnel mỗi phút, hoặc lưu lượng tiêu chuẩn trong chu kỳ thanh toán.
Hạn mức thuộc về ai? Thuộc về tài khoản. Số tunnel và lượt mở được tính theo tài khoản chứ không theo từng proxy user, vì vậy thông tin xác thực thứ hai không giúp tăng thêm hạn mức. Số byte được tính vào băng thông của gói, và byte premium tính vào hạn mức premium nằm trong tổng số đó, không cộng dồn thêm. Với gói dịch vụ thanh toán theo credit, cổng kết nối đi kèm số gigabyte riêng và có thể nạp thêm tại trang Billing. Không tính bất kỳ dung lượng nào nếu không có tunnel nào được mở.
Ai sở hữu thông tin xác thực? Hiện tại có thể là một tổ chức (organization), do đó tiến trình tải của công ty không bị dừng lại khi một nhân sự rời đi. Thành viên có thể sử dụng và xem mật khẩu; admin và owner có thể rotate, vô hiệu hóa hoặc cấu hình lại targeting; chỉ có owner mới có quyền chuyển nó ra ngoài.
Tính năng này làm được gì? Chuyển nút gạt Product trên trang Overview, Metrics hoặc Activity sang Proxy: các tunnel được phân loại kết quả tương tự như API request của bạn, số lượng đang mở hiện tại, thời gian thiết lập và lưu lượng, được phân tách theo proxy user, target, quốc gia exit hoặc client IP. Một session đã có sẵn địa chỉ thường kết nối nhanh dưới một giây.
Nhưng cổng kết nối chỉ là một đường ống thuần túy, và đó là sự đánh đổi. Client của bạn giao tiếp trực tiếp với trang web thông qua tunnel, vì vậy bộ unblocker, các quy tắc validate của bạn và khả năng giải quyết challenge trên trình duyệt sẽ không nằm trên đường truyền đó. Hệ thống cũng tính cước theo dung lượng byte: một trang từ chối trả về qua một tunnel đang mở vẫn bị tính lưu lượng byte như bình thường, trong khi với API, request không thành công sẽ không bị tính phí. Hãy truyền tải byte qua cổng này; chuyển các trang web có cơ chế chặn phức tạp sang API.
Dành cho người dùng nâng cao
Khi dung lượng premium đã hết, ba tuyến kết nối vào mạng đó sẽ nhận được ba phản hồi khác nhau, hoàn toàn có chủ ý. Kết nối chỉ định -network-premium sẽ bị từ chối kèm mã lỗi 403 ghi rõ lý do, bởi vì nếu client âm thầm nhận dữ liệu từ một nơi khác, họ sẽ tiếp tục gửi yêu cầu và sau đó tìm kiếm trong hóa đơn khoản phí cho tuyến premium vốn không hề tồn tại. Cơ chế fallback đơn giản là không được kích hoạt, còn cấu hình mặc định premium được lưu trên proxy user sẽ tự động chuyển xuống mạng shared để tunnel vẫn mở. Cả hai trường hợp này đều không chủ động chi tiêu cho kết nối đó.
Ba trường hợp kết hợp sau sẽ bị từ chối hoàn toàn thay vì chỉ đáp ứng một phần: targeting chi tiết hơn trên mạng shared, -fallback-premium đi cùng với -network-premium, và targeting chi tiết hơn khi cơ chế fallback đang bật. Cổng này chỉ hỗ trợ CONNECT, do đó client gửi request http:// thông thường thay vì tạo tunnel sẽ nhận mã 405 (curl tạo tunnel qua --proxytunnel). Ngoài ra, trình duyệt được điều khiển qua cổng này phải luôn mang theo session name, vì một lần tải trang có thể mở hàng chục kết nối.
Nhiều worker, mỗi worker chạy trên một địa chỉ riêng? Hãy gán cho mỗi worker một session name riêng:
import requests
TEMPLATE = "http://USERNAME-country-de-session-{name}:PASSWORD@proxy.foura.ai:34004"
def worker_session(name):
proxy = TEMPLATE.format(name=name)
s = requests.Session()
s.proxies = {"http": proxy, "https": proxy}
return s
workers = [worker_session(f"w{i}") for i in range(4)]
print(workers[0].get("https://example.com").status_code)
Dashboard cũng thực hiện tương tự ở quy mô lớn: đặt Sticky, chọn số lượng, và tab Connection string sẽ liệt kê mỗi dòng một địa chỉ, dưới dạng URL hoặc host:port:user:pass cho các trình quản lý proxy. Bạn gặp lỗi từ chối kết nối? Hãy thêm -sv vào lệnh curl và pipe 2>&1 | grep -i x-foura-error. Mọi tùy chọn đều có trong tài liệu tham khảo cổng proxy, và phần cấu hình Dashboard nằm trong mục Proxy Users.
Kế hoạch tiếp theo
Client đầu tiên chúng tôi xây dựng dựa trên proxy users chính là sản phẩm nội bộ. FourA Chrome extension định tuyến trình duyệt của bạn qua một trong số đó: chọn mạng và quốc gia, bật công tắc, và dòng trạng thái sẽ hiển thị địa chỉ mà các trang web nhìn thấy. Đây là bản beta, chưa có trên Chrome Web Store, được cài đặt từ mục Tools trong Dashboard ở chế độ nhà phát triển. Về lâu dài, thanh toán theo tổ chức đã có trên lộ trình công khai, điều này rất quan trọng vì proxy user của tổ chức sẽ tính phí cho chủ sở hữu tổ chức đó.
Proxy URL là chuẩn tích hợp lâu đời nhất hiện có, và mọi công cụ bạn dùng đều đã hỗ trợ nó. Phần quan trọng cần xử lý chuẩn xác chưa bao giờ là đường hầm tunnel. Điều quan trọng nằm ở ngữ nghĩa mà chuỗi cấu hình phía trước được phép biểu đạt, và những gì sẽ xảy ra khi bạn cấu hình sai.