Hướng Dẫn Cài Đặt Python Proxy Từ Thư Viện Request
Cài đặt Python proxy từ thư viện Requests thực chất chỉ là truyền một dict proxies vào lời gọi request. Nhưng để chạy ổn định cho cào dữ liệu, anh em cần thêm phần xác thực, xoay IP, dùng session và bắt lỗi đúng cách. Bài viết này của ProxyVN hướng dẫn từng phần kèm code chạy được.
Nếu anh em cũng dùng trình duyệt tự động, xem cách cài đặt Selenium Python proxy và proxy Playwright. Về chọn loại proxy cho cào dữ liệu, xem web scraping proxy là gì.
Cách cài đặt Python proxy từ thư viện Requests cơ bản
Đầu tiên cài thư viện nếu chưa có, rồi truyền tham số proxies.

Sử dụng Python Proxy
pip install requests
Tham số proxies là một dict, khóa là scheme và giá trị là URL proxy. Với proxy HTTP dùng chung cho cả http và https:
import requests
proxies = {
"http": "http://203.0.113.10:8080",
"https": "http://203.0.113.10:8080",
}
r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
print(r.json()) # {"origin": "203.0.113.10"}
Kết quả trả về origin là IP của proxy, không phải IP máy anh em. Đó là dấu hiệu proxy đã được áp dụng. Nếu vẫn thấy IP thật, kiểm tra lại địa chỉ và cổng.
Điều đáng chú ý ở đoạn code trên là tham số timeout. Rất nhiều người mới bỏ qua nó, và khi proxy treo thì script đứng im vô thời hạn vì requests mặc định chờ mãi. Luôn đặt timeout cho mọi lời gọi đi qua proxy. Giá trị mười giây là điểm khởi đầu hợp lý cho proxy datacenter; proxy dân cư nên nới lên mười lăm tới hai mươi giây vì đường truyền cuối đi qua mạng nhà dân nên trễ hơn.
Một điểm nữa: dict proxies không phân biệt loại proxy qua tên khóa mà qua scheme trong giá trị URL. Khóa http và https ở đây nói về scheme của trang đích, còn phần http:// ở đầu giá trị mới nói proxy này là proxy HTTP. Nhầm hai chỗ này là lỗi hay gặp khi chuyển từ proxy HTTP sang SOCKS5.
Vì sao cần cả khóa http và khóa https
requests chọn proxy theo scheme của URL đích. Gọi tới một địa chỉ https mà dict chỉ có khóa http thì request đi thẳng không qua proxy. Luôn khai cả hai khóa trừ khi anh em cố ý phân luồng.
Proxy SOCKS5 trong requests
Muốn dùng SOCKS5, cài thêm gói hỗ trợ và đổi scheme trong URL proxy. Gói requests[socks] kéo theo thư viện PySocks để requests hiểu được scheme socks5. Nếu thiếu gói này, requests sẽ ném lỗi báo không nhận diện được scheme.
Có hai biến thể là socks5 và socks5h. Bản thường phân giải tên miền ở phía máy anh em rồi mới gửi IP qua proxy; bản socks5h để proxy tự phân giải tên miền. Với cào dữ liệu, nên dùng socks5h để tránh lộ tên miền đích qua DNS của mạng anh em và để kết quả phân giải khớp với vùng của IP proxy.
pip install "requests[socks]"
proxies = {
"http": "socks5h://user:pass@host:1080",
"https": "socks5h://user:pass@host:1080",
}
r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
Xác thực khi cài đặt Python proxy từ thư viện Requests
Proxy có xác thực cần tài khoản và mật khẩu. Có hai cách khai.
Nhúng thẳng vào URL proxy
proxies = {
"http": "http://user:pass@host:port",
"https": "http://user:pass@host:port",
}
r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
Nếu mật khẩu có ký tự đặc biệt như @ hoặc dấu hai chấm, phải mã hóa URL trước.
from urllib.parse import quote
user = quote("user", safe="")
password = quote("p@ss:word", safe="")
proxy_url = f"http://{user}:{password}@host:port"
proxies = {"http": proxy_url, "https": proxy_url}
Dùng đối tượng auth riêng
Cách này tách thông tin đăng nhập khỏi URL, dễ đọc hơn khi quản lý nhiều proxy.
from requests.auth import HTTPProxyAuth
proxies = {"http": "http://host:port"}
auth = HTTPProxyAuth("user", "pass")
# HTTPProxyAuth áp dụng cho trang đích HTTP;
# với trang HTTPS nên nhúng tài khoản vào URL proxy
r = requests.get("http://httpbin.org/ip", proxies=proxies, auth=auth, timeout=15)
Lưu ý auth ở đây áp cho cả proxy lẫn trang đích tùy cách máy chủ phản hồi; nếu trang đích cũng cần đăng nhập riêng, tách hai lớp xác thực ra.
Giữa hai cách, nhúng vào URL gọn hơn khi anh em chỉ có vài proxy; dùng HTTPProxyAuth sạch hơn khi thông tin đăng nhập nằm ở nơi khác, ví dụ đọc từ file cấu hình hoặc kho bí mật. Dù chọn cách nào, đừng in trực tiếp URL proxy có kèm mật khẩu ra log; hãy che phần user:pass trước khi ghi để tránh lộ khi chia sẻ log gỡ lỗi.
Whitelist IP thay cho tài khoản mật khẩu
Một số nhà cung cấp cho phép đăng ký IP máy chủ của anh em vào danh sách trắng; khi đó proxy không đòi tài khoản mật khẩu nữa và dict proxies chỉ cần host với cổng. Cách này tiện cho máy chủ chạy cố định, nhưng không dùng được khi script chạy trên máy có IP thay đổi như máy cá nhân hoặc runner CI.
Dùng Session khi cài đặt Python proxy từ thư viện Requests
Với nhiều request liên tiếp, dùng Session để tái sử dụng kết nối và giữ cookie.
s = requests.Session()
s.proxies.update({
"http": "http://user:pass@host:port",
"https": "http://user:pass@host:port",
})
r1 = s.get("https://httpbin.org/ip", timeout=15)
r2 = s.get("https://httpbin.org/cookies", timeout=15)
Gán proxy vào s.proxies một lần thì mọi request qua session đó đều dùng chung, không phải truyền lại từng lần. Session cũng giữ cookie giữa các request, cần thiết khi thao tác có đăng nhập.
Session còn giúp hiệu năng: nó giữ kết nối tới proxy mở và tái sử dụng cho các request sau, thay vì bắt tay lại từ đầu mỗi lần. Với hàng nghìn request, phần tiết kiệm này đáng kể, nhất là khi proxy ở xa và mỗi lần bắt tay TLS tốn vài trăm mili giây.
Ghi đè proxy cho một request lẻ
Vẫn truyền proxies vào lời gọi get hoặc post cụ thể để ghi đè proxy mặc định của session cho đúng request đó, hữu ích khi một endpoint cần đi IP khác.
Mỗi nick một session, mỗi session một IP
Khi nuôi nhiều tài khoản, mô hình đúng là tạo một Session riêng cho mỗi nick, gán cứng một proxy IP riêng vào session đó, và không bao giờ để hai nick dùng chung một session hay một IP. Trộn cookie hoặc IP giữa các nick là nguyên nhân phổ biến khiến cả cụm bị nền tảng gộp nhóm và khóa.
Xoay IP khi cài đặt Python proxy từ thư viện Requests
Cào dữ liệu quy mô cần đổi IP để không dồn quá nhiều request vào một địa chỉ.
Xoay từ danh sách proxy tĩnh
import random
import requests
POOL = [
"http://user:pass@host1:port",
"http://user:pass@host2:port",
"http://user:pass@host3:port",
]
def fetch(url):
proxy = random.choice(POOL)
return requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=15)
Mỗi lần gọi fetch sẽ bốc ngẫu nhiên một proxy trong POOL. Cách này đơn giản và đủ cho các tác vụ vừa phải. Nhược điểm là chọn ngẫu nhiên có thể dồn nhiều request vào một IP trong thời gian ngắn. Nếu cần phân bố đều hơn, dùng vòng lặp quay vòng theo chỉ số thay vì random, hoặc theo dõi số request đã gửi cho từng IP và ưu tiên IP đang nhàn.
Dùng cổng xoay của nhà cung cấp
Nhiều dịch vụ như ProxyVN cấp một endpoint cổng xoay: anh em chỉ trỏ tới một địa chỉ, phía nhà cung cấp tự đổi IP cho mỗi request hoặc mỗi phiên. Code phía anh em chỉ cần một proxy URL, không phải tự quản lý danh sách.
ROTATING = "http://user:pass@gateway-host:port"
proxies = {"http": ROTATING, "https": ROTATING}
for _ in range(3):
r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
print(r.json()["origin"]) # mỗi lần có thể là một IP khác
Giữ một IP trong một phiên
Khi thao tác cần liên tục như đăng nhập rồi lấy dữ liệu, dùng proxy xoay theo phiên và bọc trong một Session để cùng một IP phục vụ hết chuỗi thao tác.
Nhiều endpoint cổng xoay cho phép đính kèm một tham số phiên vào tài khoản, ví dụ user-session-abc123, để giữ nguyên IP chừng nào tham số đó không đổi. Anh em sinh một chuỗi phiên cho mỗi luồng công việc, dùng suốt chuỗi thao tác, rồi đổi chuỗi khi muốn sang IP mới. Cách này cho anh em kiểm soát thời điểm xoay thay vì phó mặc cho nhà cung cấp.
Bắt lỗi khi cài đặt Python proxy từ thư viện Requests
Proxy có thể chậm, chết hoặc từ chối. Xử lý lỗi giúp script không dừng giữa chừng.
from requests.exceptions import ProxyError, ConnectTimeout, ReadTimeout, HTTPError
try:
r = requests.get(url, proxies=proxies, timeout=(5, 20))
r.raise_for_status()
except ProxyError:
print("Proxy từ chối hoặc không kết nối được")
except (ConnectTimeout, ReadTimeout):
print("Proxy hoặc trang đích phản hồi quá chậm")
except HTTPError as e:
print("Mã lỗi:", e.response.status_code)
raise_for_status ném lỗi khi mã trạng thái là 4xx hoặc 5xx, giúp anh em phân biệt proxy hỏng với trang đích chặn. Với 407 là proxy đòi xác thực, kiểm tra lại tài khoản mật khẩu.
Nên tách bạch ba nhóm lỗi để xử lý khác nhau. ProxyError và ConnectTimeout thường là proxy chết hoặc mạng tới proxy có vấn đề, nên đổi sang IP khác và thử lại. ReadTimeout có thể do trang đích chậm chứ không phải proxy, nên tăng timeout trước khi bỏ IP. Còn mã 403 hoặc 429 từ trang đích là tín hiệu IP đã bị nghi ngờ, lúc đó đổi IP và giảm tần suất chứ đừng chỉ thử lại ngay.
Trong hàm safe_get ở trên, anh em nên truyền vào một proxy khác ở mỗi lần thử lại thay vì lặp cùng một proxy đang lỗi. Kết hợp với danh sách đen tạm thời cho các IP vừa hỏng, script sẽ tự né các IP kém mà không cần can thiệp tay.
Kiểm tra IP thoát thực tế
Trước một lô việc quan trọng, gọi một trang soi IP qua proxy để chắc IP đúng như kỳ vọng, tránh trường hợp proxy âm thầm rớt và request đi bằng IP thật.
def exit_ip(proxies):
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=10)
return r.text.strip()
print("IP thoát:", exit_ip(proxies))
Đặt timeout hợp lý
Luôn đặt timeout cho mọi request qua proxy. Proxy dân cư và 4G có độ trễ cao hơn datacenter, nên timeout 10 tới 20 giây thường an toàn; quá ngắn sẽ báo lỗi giả.
requests còn cho truyền timeout dạng cặp, một giá trị cho thời gian kết nối và một cho thời gian đọc phản hồi. Đặt thời gian kết nối ngắn để phát hiện nhanh proxy chết, còn thời gian đọc dài hơn để chờ trang đích trả nội dung. Cách tách này giúp script loại IP hỏng nhanh mà vẫn kiên nhẫn với trang đích chậm.
Lưu ý khi cài đặt Python proxy từ thư viện Requests cho dự án lớn
Vài điểm giúp script chạy bền qua thời gian dài.
- Tách danh sách proxy và thông tin xác thực ra file cấu hình hoặc biến môi trường, không viết cứng trong code.
- Ghi log proxy nào lỗi bao nhiêu lần để loại bỏ IP kém khỏi vòng xoay.
- Giới hạn tần suất mỗi IP về mức người thật, thêm khoảng nghỉ ngẫu nhiên giữa các request.
- Đặt header User-Agent và Accept-Language nhất quán với vùng IP đang dùng.
- Với dữ liệu lớn, cân nhắc thư viện bất đồng bộ để chạy song song nhiều proxy.
Điểm đầu tiên quan trọng hơn vẻ ngoài của nó. Viết cứng proxy và mật khẩu trong mã nguồn nghĩa là mỗi lần đổi gói proxy anh em phải sửa code và triển khai lại, và nguy hiểm hơn là thông tin đăng nhập lọt vào lịch sử phiên bản. Đọc từ biến môi trường hoặc file cấu hình nằm ngoài kho mã giúp tách phần bí mật khỏi phần logic.
Về nhịp truy cập, đừng gửi request đều tăm tắp mỗi giây một cái. Người thật có khoảng nghỉ không đều: đọc trang vài giây, thỉnh thoảng dừng lâu hơn. Thêm một khoảng chờ ngẫu nhiên trong một dải, ví dụ từ hai tới sáu giây, và đôi khi chèn một quãng nghỉ dài, làm cho mẫu lưu lượng của anh em bớt giống máy.
requests đọc cả biến môi trường HTTP_PROXY và HTTPS_PROXY. Nếu anh em muốn tự quản lý mọi thứ bằng tham số proxies, đặt trust_env về False trên session để tránh biến môi trường của hệ thống can thiệp ngoài ý muốn.
Về danh sách proxy, cách quản lý tốt là để mỗi dòng gồm URL proxy, vùng địa lý và loại IP trong một file JSON hoặc CSV. Script đọc file này lúc khởi động, dựng vòng xoay, và ghi lại số lần lỗi của từng IP vào một file khác. Sau mỗi lượt chạy, anh em xem file thống kê để biết IP nào nên yêu cầu nhà cung cấp thay.
Với header, điểm hay bị bỏ qua là Accept-Language. Nếu IP proxy ở Nhật mà header khai tiếng Việt, một số trang xem đó là bất thường. Đặt Accept-Language khớp với vùng của IP, và giữ User-Agent ổn định trong suốt vòng đời một phiên thay vì đổi liên tục.
Chạy song song nhiều proxy
Khi lượng dữ liệu lớn, chạy tuần tự sẽ rất chậm. Anh em có thể dùng concurrent.futures với ThreadPoolExecutor để gửi nhiều request song song, mỗi luồng một proxy. Giới hạn số luồng theo số IP đang có và theo mức tần suất mà đích chấp nhận, đừng mở quá nhiều luồng trên một IP vì như vậy vẫn dồn tải vào một địa chỉ.
Nguồn proxy phù hợp để cài đặt Python proxy từ thư viện Requests
Code chỉ là phần dễ; kết quả phụ thuộc chất lượng proxy. ProxyVN cung cấp proxy HTTP, HTTPS và SOCKS5 trên nền IP datacenter, dân cư và 4G có xác thực, endpoint cổng xoay sẵn để dùng trực tiếp trong requests, và nguồn IP minh bạch.
Với cào dữ liệu các sàn kiểm tra gắt, nên chọn proxy dân cư xoay theo request; với việc nhẹ như đọc API công khai, datacenter là đủ. Đội hỗ trợ tiếng Việt trực 24/7 khi cần đổi IP hoặc xử lý sự cố. Xem thêm proxy cho training AI.
Cách bắt đầu gọn nhất là lấy một endpoint cổng xoay của ProxyVN, cắm thẳng vào dict proxies theo đúng ví dụ ở phần xoay IP, chạy thử một vòng vài chục request và in IP thoát để xác nhận IP đổi đúng nhịp. Khi luồng cơ bản chạy ổn, anh em mới thêm phần bắt lỗi, danh sách đen tạm thời và chạy song song. Dựng dần từng lớp như vậy dễ tìm ra chỗ hỏng hơn là viết tất cả cùng lúc rồi gỡ lỗi trong đống phức tạp.
Khi chạy script Requests với số lượng lớn, anh em có thể mua proxy xoay có API đổi IP tại ProxyVN, hoặc proxy dân cư tĩnh nếu cần giữ một IP cố định cho phiên làm việc.
Giải đáp nhanh về cài đặt Python proxy từ thư viện Requests
Vài câu hỏi hay gặp khi anh em cài đặt Python proxy từ thư viện Requests.
Vì sao đặt proxies mà IP không đổi?
Thường do dict thiếu khóa https trong khi URL đích là https, hoặc biến môi trường HTTPS_PROXY đang ghi đè. Khai đủ hai khóa và kiểm tra trust_env.
Lỗi 407 Proxy Authentication Required nghĩa là gì?
Proxy yêu cầu xác thực mà anh em chưa cung cấp hoặc sai. Nhúng user:pass vào URL proxy hoặc dùng HTTPProxyAuth.
Có nên dùng proxy miễn phí với requests không?
Chỉ để thử. Proxy miễn phí chậm, hay chết và IP bẩn, không hợp cho script chạy dài hoặc dữ liệu quan trọng.
requests có tự xoay IP không?
Không. requests chỉ dùng đúng proxy anh em truyền vào. Muốn xoay, tự chọn từ danh sách hoặc dùng endpoint cổng xoay của nhà cung cấp.
Dùng proxy trong requests có giấu được trọn vẹn danh tính không?
Proxy chỉ đổi IP. Header, thứ tự request, dấu vết TLS vẫn có thể lộ. Với việc cần kín, kết hợp proxy tốt với header hợp lý và nhịp truy cập giống người thật.
Tóm lại, cài đặt Python proxy từ thư viện Requests gồm bốn phần: truyền dict proxies đủ hai khóa, khai xác thực đúng cách, dùng Session cho chuỗi request và bắt lỗi kèm timeout. Xoay IP thì tự chọn từ danh sách hoặc dùng cổng xoay. Cần nguồn proxy sạch để chạy bền, hãy liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam.