Chuỗi redirect làm hỏng scraper. Response nhị phân bị lỗi khi được decode dưới dạng văn bản. Hai vấn đề này liên tục xuất hiện khi bạn vượt qua giai đoạn "tải một trang, parse HTML".
Chúng tôi đã phát hành hai tùy chọn request mới để xử lý cả hai vấn đề trên: followRedirects và returnBuffer. Chúng hiện đã sẵn sàng trên API.
Cách thức hoạt động
Kiểm soát Redirect với followRedirects
Hầu hết các scraping API xử lý redirect dưới dạng boolean: theo dõi (follow) hoặc không. Cách này hoạt động ổn cho đến khi bạn gặp một chuỗi redirect bị lặp vô hạn, hoặc khi bạn cần chính response 302 trung gian để trích xuất tham số theo dõi (tracking parameter).
followRedirects của FourA nhận một số nguyên từ 0 đến 20. Nếu bỏ qua (hoặc đặt là 0), bạn sẽ nhận lại response redirect raw, bao gồm cả header và mọi thứ khác. Nếu đặt là 5, request sẽ tuân theo tối đa năm bước nhảy (hop) trước khi trả về kết quả cuối cùng.
curl -X POST "https://eu.api.foura.ai/v1/request" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/short-link",
"followRedirects": 3,
"unblocker": true
}'
Cấu hình này sẽ theo dõi tối đa ba redirect. Nếu chuỗi kết thúc sau hai lần redirect, bạn sẽ nhận được trang cuối cùng. Nếu chuỗi dài hơn ba, bạn sẽ nhận được kết quả mà bước nhảy thứ ba trả về.
Sự khác biệt này quan trọng hơn bạn nghĩ. Các trang thương mại điện tử thường redirect qua các URL theo dõi trước khi chuyển đến trang sản phẩm. Bạn sẽ muốn theo dõi các redirect đó. Nhưng các mạng lưới tiếp thị liên kết (affiliate network) và trình rút gọn URL đôi khi tạo ra các chuỗi sâu tới sáu, bảy, hoặc tám bước nhảy. Và một số vòng lặp redirect không bao giờ kết thúc. Việc giới hạn ở một số lượng cụ thể giúp bạn thu thập dữ liệu mà không bị kẹt trong vòng lặp vô hạn gây hết thời gian chờ (timeout) của request.
Trước đây, giải pháp tạm thời là gửi một request đã tắt redirect, tự parse header Location, rồi gửi một request khác. Quá trình đó tốn tối thiểu hai lượt gọi API, độ trễ tăng gấp đôi, và bạn phải duy trì thêm code xử lý. Giờ đây, tất cả chỉ gói gọn trong một lượt gọi kèm theo một con số.
Response nhị phân Raw với returnBuffer
Khi bạn thu thập hình ảnh, tệp PDF, hoặc payload protobuf, việc decode văn bản sẽ phá hủy dữ liệu. Thư viện HTTP giả định response là văn bản, áp dụng tính năng phát hiện bảng mã (charset), và âm thầm làm hỏng mọi byte không khớp. Protobuf trở nên không thể đọc được. Header của hình ảnh bị hỏng. Kết quả là bạn nhận được các tệp bị lỗi mà không có thông báo lỗi rõ ràng nào để giải thích lý do.
returnBuffer yêu cầu API bỏ qua hoàn toàn việc decode văn bản.
curl -X POST "https://eu.api.foura.ai/v1/request" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product-image.jpg",
"returnBuffer": true
}'
Body của response trả về dưới dạng các byte raw (được mã hóa base64 trong các response JSON). Bạn chỉ cần decode ở phía mình và sẽ nhận được chính xác những gì server đã gửi. Không có giả định về bảng mã, không chuyển đổi encoding, không bị lỗi dữ liệu ngầm.
Đây là một trong những yêu cầu hỗ trợ phổ biến nhất mà chúng tôi nhận được: người dùng thu thập hình ảnh sản phẩm hoặc danh mục PDF nhưng nhận lại các tệp không thể mở được. Cách khắc phục luôn giống nhau, nhưng giờ đây đã có một flag chuyên dụng thay vì phải dùng giải pháp tạm thời.
Tác động
Cả hai tính năng đều giảm số lượng cuộc gọi API cho mỗi tác vụ. followRedirects loại bỏ các vòng lặp tự theo dõi redirect thủ công. returnBuffer loại bỏ chu kỳ "tải về, phát hiện bị lỗi, tải lại với cài đặt khác".
Đối với các mục tiêu có nhiều redirect (link tiếp thị liên kết, trình rút gọn URL, chuỗi theo dõi thương mại điện tử), chúng tôi đã thấy số lượng request giảm 40-60% trong các thử nghiệm ban đầu khi người dùng chuyển từ xử lý redirect thủ công sang followRedirects. Và đối với các tác vụ thu thập dữ liệu nhị phân (hình ảnh sản phẩm, tải xuống tài liệu), returnBuffer biến một giải pháp tạm thời nhiều bước thành một tùy chọn duy nhất (kết quả ban đầu).
Đây không phải là những tính năng hào nhoáng. Chúng là kiểu tính năng mà bạn không nghĩ tới cho đến khi scraper của bạn bị lỗi lúc 3 giờ sáng vì một trang web thêm một bước nhảy redirect vào luồng thanh toán của họ.
Dành cho Power User
Kết hợp followRedirects với tính năng xác thực response để kiểm soát chính xác các chuỗi redirect. Theo dõi các redirect, nhưng đánh dấu request thất bại nếu điểm đến cuối cùng gặp rào cản:
curl -X POST "https://eu.api.foura.ai/v1/request" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product/12345",
"followRedirects": 5,
"unblocker": true,
"validate": {
"status": { "fail": [403, 503] },
"data": { "fail": ["Access Denied", "captcha"] }
}
}'
Cấu hình này theo dõi tối đa năm redirect, sau đó kiểm tra response cuối cùng. Nếu trang web redirect bạn đến trang CAPTCHA hoặc trang từ chối truy cập, request sẽ thất bại một cách rõ ràng. Không có dữ liệu rác nào cần lọc ở các bước xử lý sau (downstream).
Để thu thập dữ liệu nhị phân, hãy kết hợp returnBuffer với các request HEAD khi bạn cần kiểm tra loại nội dung trước khi tải xuống các tệp lớn. FourA xử lý HEAD một cách chính xác (ngăn chặn các lỗi libcurl phổ biến từ bên trong), vì vậy bạn có thể kiểm tra các header mà không cần tải về body. Hãy kiểm tra Content-Type, quyết định xem có đáng để tải xuống hay không, sau đó thực hiện request đầy đủ với returnBuffer: true.
Vài nếu bạn đang sử dụng browser tasks cho các mục tiêu nặng về JavaScript, hãy lưu ý rằng các tùy chọn này áp dụng cho HTTP engine trực tiếp. Các request từ trình duyệt xử lý redirect thông qua tính năng điều hướng tích hợp của Chrome, vốn theo dõi chúng theo mặc định và không có giới hạn.
Bước tiếp theo
Chúng tôi đang nỗ lực cung cấp nhiều quyền kiểm soát hơn ở cấp độ request thông qua API: phân giải DNS tùy chỉnh, tinh chỉnh timeout theo từng giai đoạn, và các tùy chọn xử lý chứng chỉ. Mục tiêu là mang lại toàn bộ sức mạnh của curl-impersonate thông qua một giao diện REST sạch sẽ, mà không tốn chi phí vận hành hạ tầng.
Nếu có một tùy chọn cụ thể nào bạn cần, chúng tôi luôn lắng nghe. Dashboard đã hiển thị hiệu suất các request của bạn với những tùy chọn mới này, nhờ đó bạn có thể tự mình đo lường sự khác biệt.