Để chẩn đoán proxy urllib3 đơn giản, dùng ProxyManager với việc thử lại bị tắt. Cách này báo lần thử đầu, thay vì mất thêm thời gian thử lại một mục đã ngừng hoạt động. Trong dự án do uv quản lý:

uv add urllib3

Thay điểm cuối trong tài liệu bằng proxy HTTP từ dịch vụ của bạn hoặc danh sách proxy HTTP và gửi yêu cầu qua bộ quản lý đó:

import urllib3

proxy = urllib3.ProxyManager(
    "http://203.0.113.10:8080",
    timeout=urllib3.Timeout(connect=5, read=10),
    retries=False,
)

try:
    response = proxy.request("GET", "https://example.com/")
    print(response.status)
    print(response.data.decode("utf-8", errors="replace")[:200])
finally:
    proxy.clear()

Đọc response.status trước, rồi xem response.data. Đây là các trường của urllib3; status_code và text theo kiểu Requests không thay thế được. Phản hồi từ chối của trang có thể đến qua proxy hoạt động. Ngược lại, ngoại lệ trước phản hồi cho biết yêu cầu chưa hoàn tất.

retries=False là lựa chọn chẩn đoán, không phải chính sách thử lại cho môi trường thực tế. Cài đặt kết nối 5 giây và đọc 10 giây giới hạn từng giai đoạn; chúng không tạo thời hạn tổng cộng 15 giây được bảo đảm. DNS và tiến độ phản hồi có thể ảnh hưởng tổng thời gian chờ.

Ví dụ tải trước phần thân và dọn các nhóm kết nối của bộ quản lý khi kết thúc. Với yêu cầu lặp lại qua cùng điểm cuối, giữ bộ quản lý tới lúc xong việc để tái sử dụng kết nối. Chuyển sang preload_content=False đổi vòng đời: bên gọi phải đọc và giải phóng phản hồi dạng luồng.

Chọn bộ quản lý khớp dịch vụ đang lắng nghe. PoolManager thông thường không tự hiểu proxy vì một URL được lưu ở nơi khác; SOCKS dùng urllib3.contrib.socks.SOCKSProxyManager và các phụ thuộc tùy chọn của nó. Mã trên đi theo đường HTTP ProxyManager.

Bài viết liên quan