Cách cấu hình proxy HTTP(S) trong Python Requests chuẩn kỹ thuật
Cập nhật:
Thư viện requests là công cụ phổ biến nhất trong hệ sinh thái Python để viết script thu thập dữ liệu web và tương tác REST API. Để sử dụng proxy IPv4 riêng hoặc Static ISP của VinaProxy, bạn truyền chuỗi http://user:pass@ip:port vào từ điển proxies cho cả hai khóa 'http' và 'https'.
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}- 1 IP40.000 ₫
- 5+ IP35.000 ₫
- 10+ IP25.000 ₫
- 20+ IP25.000 ₫
- 50+ IP25.000 ₫
- 100+ IP25.000 ₫
- 200+ IP25.000 ₫
- 500+ IP25.000 ₫
- 1000+ IP22.000 ₫
- 2000+ IP20.000 ₫
- 1 IP40.000 ₫
- 5+ IP35.000 ₫
- 10+ IP25.000 ₫
- 20+ IP25.000 ₫
- 50+ IP25.000 ₫
- 100+ IP25.000 ₫
- 200+ IP25.000 ₫
- 500+ IP25.000 ₫
- 1000+ IP22.000 ₫
- 2000+ IP20.000 ₫
Cú pháp khai báo từ điển proxies và tái sử dụng requests.Session()
Khi gọi requests.get(url, proxies=proxies), mỗi lệnh gọi đơn lẻ sẽ phải mở lại kết nối TCP và bắt tay TLS từ đầu. Trong thực tế sản xuất, bạn nên khởi tạo đối tượng s = requests.Session() rồi gán s.proxies.update(proxies) để tận dụng kết nối HTTP Keep-Alive, giúp giảm một nửa độ trễ phản hồi.
| Thành phần trong Python Requests | Cú pháp chuẩn | Giải thích |
|---|---|---|
Khóa 'http' | 'http://user:pass@ip:port' | Định tuyến các request HTTP không mã hóa |
Khóa 'https' | 'http://user:pass@ip:port' | Giữ tiền tố http:// để urllib3 gửi lệnh HTTP CONNECT cho TLS |
| Timeout | timeout=(5, 15) | 5 giây chờ kết nối TCP, 15 giây chờ dữ liệu phản hồi |
| Xoay vòng bể IP | random.choice(proxy_pool) | Phân tán tải đều trên danh sách 10–50 IP tĩnh của VinaProxy |
Xử lý các ngoại lệ thường gặp trong urllib3 / requests
- Nếu mật khẩu chứa ký tự đặc biệt (
@,:,#), hãy dùngurllib.parse.quote(password, safe='')trước khi ghép vào chuỗi URL proxy - Lỗi
requests.exceptions.ProxyError: 407 Proxy Authentication Requiredbáo hiệu sai Username hoặc Password - Không đặt tiền tố
https://ở đầu địa chỉ máy chủ proxy nếu cổng proxy là cổng HTTP CONNECT tiêu chuẩn—hãy luôn viết'https': 'http://user:pass@ip:port' - Dùng
HTTPAdapter(pool_connections=20, pool_maxsize=50)khi chạy đa luồng vớiconcurrent.futures.ThreadPoolExecutor
Các bước thực hiện
- 1
Chuyển đổi danh sách ip:port:user:pass sang dạng URL
Dán danh sách proxy VinaProxy vào công cụ đổi định dạng proxy để nhận ngay chuỗi
http://user:pass@ip:port. - 2
Khai báo dict proxies cho cả http và https
Tạo biến
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}trong script Python. - 3
Gắn vào đối tượng requests.Session()
Khởi tạo
session = requests.Session(), gọisession.proxies.update(proxies)và thiết lập headerUser-Agenthợp lệ. - 4
Kiểm tra IP đầu ra bằng lệnh GET thử nghiệm
Gọi
r = session.get('https://vinaproxy.com/api/my-ip', timeout=10)và inr.json()để xác nhận địa chỉ IPv4 đã đổi.
Câu hỏi thường gặp
Tại sao khóa 'https' trong dict proxies lại viết là 'http://user:pass@ip:port'?
Tiền tố http:// trong chuỗi giá trị chỉ định cách script Python nói chuyện với máy chủ proxy (bằng giao thức HTTP CONNECT), còn bản thân dữ liệu gửi tới website đích https:// vẫn được mã hóa TLS đầu-cuối.
Làm sao xoay vòng 20 proxy tĩnh của VinaProxy trong Python?
Bạn đưa 20 chuỗi http://user:pass@ip:port vào itertools.cycle(proxy_list) và lấy next(pool) cho mỗi request (kèm time.sleep() hợp lý trên từng IP).
Thư viện httpx hay aiohttp bất đồng bộ có dùng chung định dạng này không?
Có. Trong httpx.AsyncClient(proxy='http://user:pass@ip:port') và aiohttp (proxy='http://user:pass@ip:port'), bạn truyền trực tiếp cùng một chuỗi URL đó.
Mua bể proxy IPv4 riêng không giới hạn băng thông cho Python
Xuất danh sách http://user:pass@ip:port tức thì tại 7 quốc gia, không tính phí theo GB.
Mua Proxy cho Python