requests.exceptions.ProxyError trong Python: Đọc lỗi và cách sửa
requests.exceptions.ProxyError là lỗi thư viện requests của Python ném ra khi không kết nối được tới proxy hoặc proxy từ chối dựng đường hầm tới website. Traceback thường rất dài, gồm cả MaxRetryError và lỗi socket, khiến nhiều anh em không biết đọc từ đâu. Bài này ProxyVN chỉ cách đọc đúng dòng quan trọng và sửa theo từng nguyên nhân, kèm code mẫu. Xem thêm dịch vụ tại ProxyVN.
Tổng quan về requests.exceptions.ProxyError
Thư viện requests là cách phổ biến nhất để gửi yêu cầu HTTP trong Python. Khi anh em truyền tham số proxies, requests chuyển yêu cầu qua proxy thay vì đi thẳng. Nếu bước đi qua proxy thất bại, requests gói lỗi lại thành ProxyError. Danh sách các ngoại lệ của thư viện được liệt kê ở phần Exceptions trong tài liệu requests.
ProxyError là lớp con của ConnectionError. Điều này có nghĩa là nếu code bắt ConnectionError, ProxyError cũng bị bắt theo. Ngược lại, nếu chỉ bắt ProxyError, các lỗi kết nối khác như timeout sẽ lọt qua. Hiểu thứ bậc này giúp anh em viết khối try except đúng.
Một traceback ProxyError điển hình
Đây là dạng anh em hay thấy nhất khi chạy script qua proxy:
requests.exceptions.ProxyError: HTTPSConnectionPool(host='api.ipify.org', port=443):
Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy',
NewConnectionError('<urllib3.connection.HTTPSConnection object>: Failed to establish
a new connection: [WinError 10061] No connection could be made because the target
machine actively refused it')))
Câu "Max retries exceeded" làm nhiều người tưởng requests đã thử lại nhiều lần. Thực tế mặc định requests không thử lại, câu này chỉ là cách urllib3 báo rằng đã hết số lần cho phép. Phần đáng đọc nằm trong ngoặc sau chữ "Caused by".
requests.exceptions.ProxyError khác các lỗi requests khác ở đâu
Ngoại lệ |
Khi nào xảy ra |
Liên quan proxy |
|---|---|---|
ProxyError |
Không kết nối được tới proxy hoặc proxy từ chối |
Có, lỗi nằm ở chặng tới proxy |
SSLError |
Bắt tay TLS thất bại |
Có thể, nếu proxy can thiệp HTTPS |
ConnectTimeout |
Không mở được kết nối trong thời gian chờ |
Có thể, proxy chậm hoặc chết |
ReadTimeout |
Đã kết nối nhưng chờ dữ liệu quá lâu |
Thường do website hoặc proxy chậm |
InvalidURL, InvalidSchema |
Địa chỉ proxy sai định dạng |
Có, lỗi cú pháp |
ConnectionError |
Lỗi kết nối nói chung |
Lớp cha của ProxyError |
Cơ chế phát sinh requests.exceptions.ProxyError
Một yêu cầu qua proxy đi qua ba lớp: requests ở trên cùng, urllib3 ở giữa, socket của hệ điều hành ở dưới. Lỗi phát sinh ở lớp dưới rồi được gói dần lên trên.

Ba lớp trong một traceback
Với trang HTTP
Requests mở kết nối TCP tới proxy và gửi nguyên yêu cầu "GET http://site/ HTTP/1.1" kèm header Proxy-Authorization nếu có. Proxy tự lấy trang rồi trả về. Lỗi ở bước mở kết nối tới proxy sẽ thành ProxyError.
Với trang HTTPS
Requests gửi lệnh CONNECT tới proxy để mở đường hầm, sau đó mới bắt tay TLS với website. Nếu proxy trả mã khác 200 cho lệnh CONNECT, ví dụ 407 hay 403, urllib3 báo "Tunnel connection failed" và requests gói thành ProxyError. Cách proxy HTTP xử lý lệnh CONNECT được mô tả trong trang Proxy servers and tunneling của MDN.
Với proxy SOCKS
Requests cần thêm gói PySocks để hỗ trợ socks5:// và socks5h://. Lỗi bắt tay SOCKS cũng được gói thành ProxyError hoặc ConnectionError tuỳ phiên bản. Thiếu PySocks thì requests báo InvalidSchema hoặc "Missing dependencies for SOCKS support".
Đọc traceback từ trong ra ngoài: dòng sau chữ "Caused by" sâu nhất mới là nguyên nhân thật.
Đọc thông điệp requests.exceptions.ProxyError để tìm nguyên nhân
Phần quan trọng nhất của bài. Đối chiếu thông điệp trong traceback với bảng dưới.

Bảng thông điệp và nguyên nhân
Thông điệp trong traceback |
Nguyên nhân thường gặp |
Hướng sửa |
|---|---|---|
Unable to connect to proxy … actively refused it (10061) |
Sai cổng, proxy không chạy, IP chưa whitelist ở mức tường lửa |
Kiểm tra host, cổng, trạng thái proxy |
Unable to connect to proxy … timed out (10060) |
Proxy chết, tường lửa chặn, mạng chặn cổng |
Thử mạng khác, kiểm tra cổng |
Tunnel connection failed: 407 Proxy Authentication Required |
Sai user, mật khẩu hoặc chưa gửi xác thực |
Kiểm tra thông tin, mã hoá ký tự đặc biệt |
Tunnel connection failed: 403 Forbidden |
Proxy cấm đích này hoặc IP chưa whitelist |
Kiểm tra whitelist, chính sách proxy |
Tunnel connection failed: 502 Bad Gateway |
Proxy không tới được website |
Website chặn IP proxy hoặc đang sập |
Remote end closed connection without response |
Proxy đóng kết nối, thường do sai giao thức |
Kiểm tra http hay socks5 |
Cannot connect to proxy … getaddrinfo failed |
Không phân giải được tên máy chủ proxy |
Sai tên miền proxy, lỗi DNS |
OSError: Tunnel connection failed |
Proxy trả lời không hợp lệ cho CONNECT |
Proxy không hỗ trợ HTTPS, sai loại |
Với lỗi 407, anh em xem thêm bài sửa lỗi 407 Proxy Authentication Required vì cơ chế xác thực được giải thích chi tiết ở đó.
Nguyên nhân gây requests.exceptions.ProxyError thường gặp
Qua các ca hỗ trợ khách viết tool bằng Python, ProxyVN thấy lỗi thường rơi vào các nhóm dưới.
Sai định dạng URL proxy
Requests cần URL đầy đủ có lược đồ, ví dụ http://user:pass@host:port. Nhiều anh em chỉ đưa host:port hoặc dán nguyên chuỗi host:port:user:pass mà nhà cung cấp gửi. Requests hiểu sai phần nào là host, phần nào là cổng, kết quả là kết nối tới địa chỉ không tồn tại. Bài định dạng proxy giải thích các kiểu chuỗi proxy và cách chuyển đổi.
Dùng lược đồ https:// cho proxy HTTP thường
Đây là lỗi cực kỳ phổ biến. Từ điển proxies có khoá "https" chỉ cho biết dùng proxy nào với trang HTTPS. Còn giá trị nên là http:// vì kết nối tới proxy là HTTP thường. Viết "https://host:port" khiến urllib3 cố bắt tay TLS với proxy, proxy không hiểu và đóng kết nối.
Mật khẩu chứa ký tự đặc biệt chưa được mã hoá
Mật khẩu có ký tự @, :, /, #, % làm URL bị cắt sai chỗ. Ví dụ mật khẩu "ab@12" khiến requests hiểu "12@host" là tên máy chủ. Phải mã hoá các ký tự này trước khi ghép vào URL.

Mã hoá ký tự đặc biệt trong mật khẩu proxy
Thiếu socks5h khi dùng proxy SOCKS
Với socks5://, tên miền được phân giải ở máy anh em. Với socks5h://, tên miền được gửi cho proxy phân giải. Nếu máy không phân giải được tên miền đích, hoặc anh em muốn tránh rò rỉ DNS, phải dùng socks5h. Thiếu chữ h đôi khi gây lỗi khó hiểu với những trang chỉ phân giải được ở phía proxy.
Biến môi trường HTTP_PROXY ghi đè
Requests mặc định đọc biến môi trường HTTP_PROXY, HTTPS_PROXY, NO_PROXY. Nếu máy đặt proxy công ty hoặc proxy cũ trong biến môi trường, requests dùng nó dù anh em không truyền proxies. Chi tiết được nói trong phần Proxies của tài liệu requests. Biến NO_PROXY cũng ảnh hưởng, xem bài NO_PROXY là gì.
Proxy xác thực bằng IP nhưng IP máy chạy script đổi
Script chạy trên VPS, Colab hay máy chủ đám mây có IP khác IP đã whitelist. Proxy từ chối ngay, thường báo 407 hoặc đóng kết nối. Bài xác thực proxy bằng IP whitelist hay user password giúp chọn cách xác thực phù hợp.
Proxy hết hạn, hết luồng hoặc đã chết
Proxy hết hạn từ chối mọi kết nối. Proxy bị vượt số luồng sẽ đóng các kết nối dư. Proxy dân cư có thể chết khi thiết bị nguồn ngắt mạng. Kiểm tra trạng thái trong trang quản lý proxy trước khi sửa code.
Cách sửa requests.exceptions.ProxyError từng bước
Làm lần lượt các bước dưới. Mỗi bước đều có code mẫu ngắn.
Bước 1: Viết URL proxy đúng định dạng
proxies = {
"http": "http://user:matkhau@103.x.x.x:8080",
"https": "http://user:matkhau@103.x.x.x:8080",
}
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=15)
print(r.text)
Cả hai khoá đều dùng giá trị http:// vì proxy là proxy HTTP. Chỉ dùng https:// cho giá trị khi nhà cung cấp nói rõ proxy nhận kết nối TLS.
Bước 2: Mã hoá user và mật khẩu
from urllib.parse import quote
user = quote("ten_dang_nhap", safe="")
pwd = quote("ab@12#x", safe="")
proxy = f"http://{user}:{pwd}@103.x.x.x:8080"
Hàm quote trong thư viện urllib.parse đổi @ thành %40, # thành %23. Tham số safe rỗng để mã hoá cả dấu /.
Bước 3: Cài PySocks và dùng socks5h cho proxy SOCKS
pip install "requests[socks]"
proxies = {"http": "socks5h://user:matkhau@103.x.x.x:1080",
"https": "socks5h://user:matkhau@103.x.x.x:1080"}
Bước 4: Tắt biến môi trường khi cần kiểm soát
s = requests.Session()
s.trust_env = False
r = s.get("https://api.ipify.org", proxies=proxies, timeout=15)
Đặt trust_env bằng False để requests bỏ qua biến môi trường và tệp .netrc. Như vậy chỉ proxy anh em truyền vào được dùng. Đây là cách nhanh nhất để loại trừ nghi phạm biến môi trường.
Bước 5: Thử proxy bằng công cụ ngoài Python
Chạy curl với cùng proxy. Nếu curl cũng lỗi, vấn đề không nằm ở code. Nếu curl chạy còn Python lỗi, lỗi nằm ở cách ghép URL hoặc biến môi trường. Bài cURL proxy là gì có ví dụ dùng curl với từng loại proxy.
Bước 6: Thêm IP máy chạy script vào whitelist
Lấy IP công khai của máy chạy script, thêm vào trang quản lý proxy. Nếu IP máy thay đổi thường xuyên, chuyển sang xác thực user và mật khẩu.
Bước 7: Đặt timeout và bắt lỗi đúng
Luôn truyền timeout. Không có timeout, một proxy treo có thể làm script đứng mãi. Bắt ProxyError riêng để đánh dấu proxy hỏng, bắt ConnectTimeout và ReadTimeout riêng để thử lại.
Thử lại có độ trễ khi gặp requests.exceptions.ProxyError
Trong tool chạy dài, lỗi proxy đơn lẻ là chuyện bình thường. Thay vì dừng cả chương trình, nên thử lại với thời gian chờ tăng dần, sau một số lần mới bỏ proxy đó.

Thử lại có độ trễ tăng dần
Dùng Retry của urllib3
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
retry = Retry(total=4, connect=4, backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504])
s = requests.Session()
s.mount("http://", HTTPAdapter(max_retries=retry))
s.mount("https://", HTTPAdapter(max_retries=retry))
Với backoff_factor bằng 1, thời gian chờ giữa các lần thử tăng theo cấp số nhân. Các tham số của Retry có trong tài liệu urllib3. Lưu ý thử lại với lỗi proxy chỉ có ích khi lỗi tạm thời. Nếu sai mật khẩu, thử bao nhiêu lần cũng vậy.
Xoay sang proxy khác khi một proxy hỏng
import random
pool = ["http://u:p@103.x.x.1:8080", "http://u:p@103.x.x.2:8080"]
def get(url):
for _ in range(len(pool)):
p = random.choice(pool)
try:
return requests.get(url, proxies={"http": p, "https": p}, timeout=15)
except requests.exceptions.ProxyError:
pool.remove(p)
raise RuntimeError("Het proxy dung duoc")
Đoạn code tối giản này loại proxy hỏng khỏi danh sách. Với hệ thống lớn, nên lưu lý do hỏng và kiểm tra lại proxy sau một thời gian.
Kiểm tra proxy trước khi chạy để giảm requests.exceptions.ProxyError
Một bước kiểm tra trước giúp tránh phần lớn lỗi giữa chừng. Script chạy hàng giờ mà gặp lỗi ở phút đầu là mất thời gian vô ích.
Hàm kiểm tra nhanh
def check(p):
try:
r = requests.get("https://api.ipify.org", proxies={"http": p, "https": p}, timeout=10)
return r.status_code == 200, r.text
except requests.exceptions.RequestException as e:
return False, type(e).__name__
Chạy hàm cho từng proxy, giữ lại proxy trả về đúng. Kết quả r.text cũng cho biết IP mà website nhìn thấy, để chắc proxy hoạt động đúng như mong đợi.
Kiểm tra hàng loạt bằng nhiều luồng
Với vài trăm proxy, dùng ThreadPoolExecutor để kiểm tra song song. Giới hạn số luồng vừa phải để không vượt giới hạn kết nối của nhà cung cấp. Bài công cụ kiểm tra proxy gợi ý thêm cách test hàng loạt.
Ghi log đủ thông tin
Khi gặp lỗi, ghi lại proxy, thời điểm, loại ngoại lệ và thông điệp gốc. Log đầy đủ giúp phát hiện một proxy lỗi lặp lại hay lỗi xảy ra theo khung giờ.
requests.exceptions.ProxyError khi chạy trên VPS, Docker và Colab
Môi trường chạy khác máy cá nhân có vài nguyên nhân riêng.
Trên VPS
IP của VPS khác IP máy nhà. Nếu proxy xác thực theo IP, phải thêm IP VPS vào whitelist. Một số nhà cung cấp VPS chặn cổng ra ngoài lạ, kiểm tra tường lửa của VPS nếu kết nối tới proxy bị timeout. Bài proxy và VPS giải thích cách hai thứ này phối hợp.
Trong Docker
Container có thể kế thừa biến HTTP_PROXY từ cấu hình Docker daemon. Kiểm tra biến môi trường bên trong container. Nếu proxy là 127.0.0.1 trên máy chủ, container không gọi được địa chỉ đó vì localhost trong container là chính container.
Trên Google Colab và dịch vụ đám mây
IP của máy Colab thay đổi theo phiên, nên proxy xác thực IP gần như không dùng được. Dùng proxy có user và mật khẩu. Lưu thông tin đăng nhập bằng tính năng bí mật của dịch vụ thay vì ghi thẳng vào notebook.
Chọn proxy phù hợp để giảm requests.exceptions.ProxyError
Cấu hình đúng là một nửa, chất lượng proxy là nửa còn lại.
Hỗ trợ cả HTTP và SOCKS5
Proxy hỗ trợ cả hai giao thức cho phép anh em đổi sang SOCKS5 khi một số trang không chạy tốt qua HTTP và ngược lại.
Xác thực linh hoạt
Proxy có cả user, mật khẩu và whitelist IP giúp chạy script ở nhiều môi trường mà không phải sửa cấu hình.
Giới hạn luồng rõ ràng
Biết proxy cho bao nhiêu kết nối đồng thời để cấu hình số luồng trong tool. Bài 1 proxy chạy được bao nhiêu luồng giúp ước lượng. Nếu cần proxy Việt Nam cho script Python chạy ổn định, anh em có thể mua proxy tại ProxyVN với cả HTTP, SOCKS5 và hai cách xác thực.
Phân biệt requests.exceptions.ProxyError do proxy hay do website
Một câu hỏi anh em hay gặp là lỗi nằm ở proxy hay ở website đang chặn proxy. Hai trường hợp cần cách xử lý khác nhau. Sửa nhầm chỗ sẽ tốn công mà lỗi vẫn còn.
Dấu hiệu lỗi nằm ở proxy
- Mọi website đều lỗi khi đi qua cùng proxy, kể cả trang kiểm tra IP đơn giản.
- Thông điệp nói "Unable to connect to proxy" hoặc "getaddrinfo failed" với tên proxy.
- Lỗi xuất hiện ngay lập tức, không có thời gian chờ, thường là bị từ chối kết nối.
- Curl với cùng proxy cũng lỗi.
Khi gặp nhóm dấu hiệu này, việc sửa code ít khi có tác dụng. Kiểm tra hạn sử dụng, trạng thái và thông tin đăng nhập proxy trước.
Dấu hiệu lỗi nằm ở website
- Trang kiểm tra IP mở được, chỉ website cần lấy dữ liệu bị lỗi.
- Thông điệp nói "Tunnel connection failed: 502" hoặc 503, nghĩa là proxy đã nhận lệnh nhưng không tới được website.
- Website trả 403, 429 thay vì ProxyError. Trường hợp này requests không ném lỗi mà trả về đối tượng phản hồi có mã trạng thái tương ứng.
Với website chặn, việc cần làm là giảm tần suất gửi yêu cầu, đổi loại IP hoặc kiểm tra độ sạch của IP. Bài vì sao mua proxy bị block và bài lỗi 429 phân tích sâu hai mã này.
Một mẹo kiểm tra nhanh
Gửi cùng lúc hai yêu cầu qua cùng proxy: một tới trang kiểm tra IP, một tới website cần lấy dữ liệu. So sánh kết quả hai yêu cầu sẽ cho biết ngay lỗi thuộc nhóm nào. Thêm đoạn kiểm tra này vào đầu script giúp tool tự báo nguyên nhân khi chạy lỗi.
Lỗi requests.exceptions.ProxyError trên Windows, macOS và Linux
Thông điệp socket trong traceback khác nhau theo hệ điều hành. Biết mã lỗi của từng hệ giúp đọc nhanh hơn.
Trên Windows
Windows trả về các mã WinError. Mã 10061 nghĩa là máy đích chủ động từ chối, thường do sai cổng hoặc proxy không chạy. Mã 10060 nghĩa là hết thời gian chờ, thường do tường lửa chặn hoặc proxy chết. Mã 11001 nghĩa là không phân giải được tên máy chủ proxy. Phần mềm diệt virus trên Windows đôi khi chặn Python kết nối ra ngoài, kiểm tra nhật ký của phần mềm nếu mọi proxy đều lỗi.
Trên macOS và Linux
Các hệ này trả về mã errno như Connection refused (111 trên Linux, 61 trên macOS), Connection timed out (110 hoặc 60), Name or service not known. Ý nghĩa giống Windows. Trên Linux, kiểm tra thêm biến môi trường trong tệp cấu hình shell và tệp /etc/environment, vì proxy hệ thống thường được đặt ở đó.
Kiểm tra cổng proxy có mở không
Trên mọi hệ, có thể kiểm tra nhanh cổng proxy bằng lệnh kết nối thô. Trên Windows dùng Test-NetConnection trong PowerShell với tham số host và port. Trên macOS, Linux dùng nc với tham số -vz. Nếu cổng không mở, vấn đề không nằm ở Python.
Bảo mật thông tin proxy trong code Python
Nhiều ca lỗi ProxyError bắt nguồn từ việc lưu thông tin proxy lộn xộn, sửa chỗ này quên chỗ kia. Lưu trữ gọn gàng vừa giảm lỗi, vừa tránh lộ thông tin.
Không ghi thẳng mật khẩu vào code
Đặt thông tin proxy trong tệp .env và đọc bằng thư viện như python-dotenv, hoặc đọc từ biến môi trường riêng của dự án. Khi đổi proxy chỉ cần sửa một chỗ. Khi chia sẻ code, không vô tình lộ mật khẩu.
Không đưa tệp chứa proxy lên kho mã công khai
Thêm tệp .env và tệp danh sách proxy vào .gitignore. Nhiều tài khoản proxy bị dùng trộm vì chủ nhân đẩy cả mật khẩu lên kho mã công khai. Khi lộ, đổi mật khẩu ngay trong trang quản lý proxy.
Che mật khẩu khi ghi log
Khi ghi log lỗi, thay phần mật khẩu trong URL proxy bằng dấu sao. Traceback của requests in nguyên chuỗi URL, nên cần bắt ngoại lệ và tự ghi log thay vì để traceback mặc định lộ ra tệp log dùng chung.
Tối ưu hiệu năng để tránh requests.exceptions.ProxyError khi chạy nhiều luồng
Tool chạy nhiều luồng dễ gặp ProxyError hơn vì vượt giới hạn kết nối hoặc mở quá nhiều kết nối mới.
Dùng Session để tái sử dụng kết nối
Mỗi lần gọi requests.get mà không có Session, thư viện mở kết nối mới tới proxy. Với hàng nghìn yêu cầu, số kết nối mới rất lớn, proxy có thể từ chối. Dùng Session giữ kết nối sống và dùng lại, giảm số lần bắt tay.
Giới hạn số luồng trên mỗi proxy
Nếu mỗi proxy cho tối đa một số kết nối đồng thời, chia luồng sao cho không luồng nào vượt mức. Ví dụ có 10 proxy, mỗi proxy cho 20 kết nối, tổng số luồng nên dưới 200 để còn dư cho thử lại.
Đặt kích thước pool hợp lý
HTTPAdapter có tham số pool_connections và pool_maxsize. Khi chạy nhiều luồng với một Session, tăng pool_maxsize để các luồng không tranh nhau kết nối. Nếu pool quá nhỏ, urllib3 phải bỏ kết nối thừa và mở lại, tăng nguy cơ lỗi.
Kịch bản gỡ lỗi requests.exceptions.ProxyError mẫu
Để anh em hình dung cách áp dụng các bước trên, đây là một ca gỡ lỗi thường gặp ở khách hàng của ProxyVN, kể lại theo thứ tự.
Tình huống
Một anh em viết script lấy giá sản phẩm, chạy trên máy nhà không lỗi. Khi đưa lên VPS chạy theo lịch, script báo ProxyError với thông điệp "Tunnel connection failed: 407 Proxy Authentication Required". Thông tin proxy trong code không đổi.
Cách khoanh vùng
Mã 407 cho biết proxy đã nhận kết nối nhưng không chấp nhận xác thực. Như vậy host và cổng đúng, proxy còn sống. Có hai khả năng: thông tin user và mật khẩu sai, hoặc proxy đang xác thực theo IP. Trên máy nhà chạy được nghĩa là IP nhà đã được whitelist, còn VPS có IP khác. Kiểm tra trang quản lý proxy thấy đúng là chỉ có IP nhà trong danh sách.
Cách sửa
Có hai hướng. Hướng một là thêm IP của VPS vào whitelist. Hướng hai là bật xác thực user và mật khẩu, đưa thông tin vào URL proxy có mã hoá ký tự đặc biệt. Anh em chọn hướng hai vì sau này còn chạy script ở nhiều nơi. Sau khi sửa, thêm hàm kiểm tra proxy ở đầu script để lần sau gặp lỗi sẽ biết ngay mà không phải đọc traceback dài.
Bài học rút ra
Lỗi không nằm ở code mà nằm ở môi trường chạy. Mỗi khi đổi máy chạy script, việc đầu tiên là kiểm tra IP mới có cần whitelist không. Ghi chú điều này trong tài liệu của dự án giúp người khác trong nhóm tránh mất thời gian.
Câu hỏi thường gặp về requests.exceptions.ProxyError
Vì sao trình duyệt dùng proxy được mà Python thì lỗi
Trình duyệt có thể hiện hộp thoại nhập mật khẩu hoặc đang dùng proxy khác trong cài đặt. Python chỉ dùng đúng chuỗi anh em truyền vào. Kiểm tra lại URL proxy, mã hoá ký tự đặc biệt và biến môi trường.
Có nên tắt kiểm tra chứng chỉ bằng verify=False không
Không nên, trừ khi đang gỡ lỗi với công cụ chặn HTTPS của chính mình. ProxyError không liên quan tới chứng chỉ. Tắt kiểm tra chứng chỉ không sửa được lỗi proxy mà còn mở ra rủi ro bảo mật.
aiohttp và httpx có lỗi tương tự không
Có, nhưng tên ngoại lệ khác. aiohttp báo ClientProxyConnectionError hoặc ClientHttpProxyError, httpx báo ProxyError của riêng nó. Bài aiohttp proxy có phần xử lý lỗi cho hai thư viện này.
pip cài thư viện cũng báo ProxyError thì sao
pip dùng thư viện riêng nhưng thông điệp tương tự. Cách cấu hình proxy cho pip có trong bài pip proxy.
Tổng kết
requests.exceptions.ProxyError luôn có nguyên nhân nằm ở dòng sau chữ "Caused by": proxy không mở được, xác thực 407, URL sai định dạng hay biến môi trường ghi đè. Sửa URL, mã hoá mật khẩu, dùng socks5h, tắt trust_env và thêm thử lại có độ trễ. Cần proxy ổn định cho tool Python, anh em liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam để được hỗ trợ.