Liệt kê session và xoay IP qua API trước khi scraping Python
30 tháng 10, 2026
Mọi scraper đều có nguy cơ bị chặn ngay từ những request đầu tiên nếu IP ra ngoài chưa được xác nhận. Thay vì để script chạy và xử lý lỗi sau đó, bạn nên kiểm tra session proxy, xem IP hiện tại là gì và xoay IP ngay khi cần trước khi bắt đầu thu thập dữ liệu. Bài viết này hướng dẫn cách làm điều đó bằng API và cURL/Python, sau đó tích hợp vào vòng lặp scraping đơn giản.
Lấy danh sách session qua API
Trước khi cấu hình scraper, bạn cần biết session nào đang sẵn sàng. Gọi điểm cuối liệt kê session với khóa API trong header Authorization. Phản hồi thường trả về mảng các đối tượng session, mỗi đối tượng chứa mã nhận dạng session, tên người dùng, mật khẩu và chế độ xoay hiện tại. Bạn hãy lưu lại SESSION_ID của session muốn sử dụng.
curl -i https://backend-api.ro-proxy.com/api/session \
-H "Authorization: Bearer API_KEY"
Trong Python, bạn có thể dùng thư viện requests, một gói phổ biến trong cộng đồng, để gọi cùng điểm cuối:
import requests
API_URL = "https://backend-api.ro-proxy.com/api/session"
headers = {"Authorization": "Bearer API_KEY"}
resp = requests.get(API_URL, headers=headers, timeout=30)
resp.raise_for_status()
sessions = resp.json()
print(sessions)
Nếu yêu cầu thành công, bạn sẽ nhận được danh sách session có thể chọn. Nếu nhận lỗi 401 hoặc 403, hãy kiểm tra lại API_KEY.
Kiểm tra IP thoát trước khi gửi request
Sau khi có session, hãy xác nhận IP mà trang web đích sẽ thấy. Điều này tránh sai sót về vị trí hoặc IP đã bị đánh dấu trước khi scraper chạy thật.
Kết nối qua gateway của RoProxy sử dụng định dạng http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT. Cổng này dùng cho cả HTTP và HTTPS. Nếu bạn dùng gói Pro hoặc Business, còn có cổng SOCKS5 riêng ở định dạng socks5://USERNAME:PASSWORD@GATEWAY_HOST:SOCKS5_PORT.
Dùng cURL để kiểm tra IP thoát qua HTTP proxy:
curl -x http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT \
https://httpbin.org/ip
Hoặc kiểm tra qua SOCKS5 (chỉ có trên gói Pro và Business):
curl -x socks5://USERNAME:PASSWORD@GATEWAY_HOST:SOCKS5_PORT \
https://api.ipify.org?format=json
Trong Python với requests:
import requests
proxies = {
"http": "http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT",
"https": "http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT",
}
resp = requests.get(
"https://httpbin.org/ip",
proxies=proxies,
timeout=30,
)
print(resp.json())
Nếu phản hồi trả về IP khác với IP máy bạn, proxy đang hoạt động. Nếu nhận lỗi 407, hãy kiểm tra lại tên người dùng và mật khẩu của session. Nếu liên tục nhận 429, bạn đang gửi quá nhanh so với giới hạn của mục tiêu, hãy giảm tần suất hoặc xoay IP.
Xoay IP ngay lập tức khi cần
Một số trường hợp bạn cần đổi IP ngay lập tức thay vì chờ chế độ xoay tự động. Gọi điểm cuối xoay theo mã session:
curl -i -X POST https://backend-api.ro-proxy.com/api/session/SESSION_ID/rotate \
-H "Authorization: Bearer API_KEY"
Trong Python:
import requests
SESSION_ID = "SESSION_ID"
rotate_url = f"https://backend-api.ro-proxy.com/api/session/{SESSION_ID}/rotate"
headers = {"Authorization": "Bearer API_KEY"}
resp = requests.post(rotate_url, headers=headers, timeout=30)
resp.raise_for_status()
print(resp.json())
Sau khi gọi xoay, hãy kiểm tra lại IP thoát bằng bước trên trước khi tiếp tục scraping. Điều này hữu ích khi bạn nhận thấy phản hồi từ trang web bắt đầu bất thường, ví dụ trang trả về trang xác thực hoặc chặn request.
Tích hợp vào vòng lặp scraping
Dưới đây là mô hình kết hợp liệt kê session, kiểm tra IP và xoay IP khi cần trong một script Python đơn giản:
import requests
import time
import os
API_KEY = os.getenv("ROPROXY_API_KEY", "API_KEY")
SESSION_ID = os.getenv("ROPROXY_SESSION_ID", "SESSION_ID")
proxies = {
"http": "http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT",
"https": "http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT",
}
def get_exit_ip():
r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=30)
r.raise_for_status()
return r.json().get("origin")
def rotate_ip():
url = f"https://backend-api.ro-proxy.com/api/session/{SESSION_ID}/rotate"
r = requests.post(url, headers={"Authorization": f"Bearer {API_KEY}"}, timeout=30)
r.raise_for_status()
# Kiểm tra IP ban đầu
ip = get_exit_ip()
print("IP hiện tại:", ip)
# Ví dụ scraping một danh sách URL
urls = ["https://example.com/page1", "https://example.com/page2"]
for url in urls:
try:
r = requests.get(url, proxies=proxies, timeout=30)
if r.status_code == 429:
print("Nhận 429, xoay IP và thử lại")
rotate_ip()
time.sleep(2)
r = requests.get(url, proxies=proxies, timeout=30)
r.raise_for_status()
print(url, r.status_code, len(r.text))
except requests.RequestException as e:
print("Lỗi:", url, e)
rotate_ip()
time.sleep(2)
Vòng lặp trên kiểm tra IP ban đầu, sau đó duyệt qua danh sách URL. Khi gặp 429 hoặc lỗi kết nối, script gọi xoay IP, nghỉ một khoảng ngắn rồi thử lại. Bạn có thể điều chỉnh thời gian nghỉ và số lần thử lại tùy theo mục tiêu.
Chọn chế độ xoay phù hợp
Mỗi session trên dịch vụ có một trong ba chế độ xoay. Sticky giữ IP cho đến khi bạn xoay thủ công hoặc IP gặp sự cố, phù hợp khi cần giữ phiên làm việc trên trang web. Timed đổi IP sau khoảng thời gian bạn đặt, thích hợp cho scraping định kỳ mà không muốn bị gắn bó với một IP quá lâu. Per request đổi IP cho mỗi kết nối mới, chỉ có trên gói Business, và là lựa chọn mạnh nhất khi muốn tránh theo dõi theo IP. Hãy chọn chế độ trước khi bắt đầu luồng công việc.
Xử lý lỗi phổ biến
Khi chạy scraper qua proxy, bạn có thể gặp một số lỗi thường gặp. Lỗi 407 nghĩa là xác thực proxy thất bại, thường do sai tên người dùng hoặc mật khẩu session. Lỗi 429 nghĩa là mục tiêu từ chối quá nhiều request, bạn nên giảm tốc độ hoặc xoay IP. Lỗi timeout hoặc ECONNRESET thường liên quan đến mạng hoặc proxy ngắt kết nối, hãy thử lại sau khi xoay IP hoặc chuyển sang session khác. Luôn ghi log mã lỗi và URL để dễ dàng chẩn đoán sau này.
Quản lý credential an toàn
Không nên cứng API_KEY, USERNAME và PASSWORD trực tiếp trong mã nguồn, đặc biệt khi triển khai lên máy chủ công cộng. Hãy dùng biến môi trường hoặc tệp cấu hình riêng biệt. Ví dụ trên đã sử dụng os.getenv để đọc khóa API và mã session từ môi trường. Điều này giúp bạn xoay credential mà không phải sửa lại code.
Kết luận
Việc xác nhận session và IP thoát trước khi scraping giúp bạn phát hiện sớm sai cấu hình và giảm nguy cơ bị chặn IP. Kết hợp gọi API xoay IP khi cần với vòng lặp xử lý lỗi 429 sẽ làm scraper ổn định hơn.
Với RoProxy, mỗi session có tên người dùng và mật khẩu riêng, và bạn có thể xoay IP bất cứ lúc nào qua API để giữ luồng scraping ổn định. Nếu cần hỗ trợ, hãy liên hệ qua Telegram.