Python urllib: Tắt proxy cho một opener
Tạo opener urllib kết nối trực tiếp bằng ProxyHandler({}) mà không thay đổi các client khác hay môi trường của tiến trình.
Truyền một ánh xạ rỗng vào ProxyHandler khi một opener urllib cần kết nối trực tiếp:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Từ điển rỗng không cung cấp tuyến proxy nào. Nếu bỏ qua ánh xạ, trình xử lý sẽ phát hiện proxy từ môi trường và thiết lập nền tảng. Hai cách tạo này thể hiện hai chính sách khác nhau.
Ví dụ sử dụng thư viện chuẩn Python và giữ nguyên việc xác minh HTTPS thông thường. Khối with đóng phản hồi, kể cả khi ngoại lệ khiến chương trình thoát khỏi khối.
Yêu cầu trực tiếp và qua proxy trong cùng ứng dụng
Hai opener có thể mang hai chính sách mà không cần thay đổi biến môi trường giữa các lần gọi:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}))
with proxied.open("https://example.com/", timeout=10) as response:
print(response.status)
Thay địa chỉ loopback bằng proxy HTTP của bạn, hoặc chọn một ứng viên từ danh sách proxy HTTP để so sánh qua proxy. Nó có thể chuyển kết nối tới đích HTTPS qua CONNECT nếu dịch vụ cho phép. Giao thức và khả năng xác thực của bên lắng nghe phải phù hợp với trình xử lý.
Giữ nguyên opener mặc định
Gọi direct.open hoặc proxied.open qua đối tượng chịu trách nhiệm về tuyến. install_opener thay đổi mặc định của toàn tiến trình mà các hàm tiện ích urllib sử dụng; vì vậy thư viện dùng nó có thể ảnh hưởng đến mã không liên quan. Opener tách biệt ở trên không cần tới nó.
Đối số timeout là thiết lập cho một thao tác, không phải hạn chót theo thời gian thực cho toàn bộ mỗi lần truyền. Chỉ đọc dữ liệu cần thiết và dùng hạn chót ở cấp cao hơn nếu công việc có ngân sách tổng thời gian nghiêm ngặt.
Các đối tượng opener này không thay đổi client của thư viện khác, tiến trình đang tồn tại hay thiết lập proxy của trình duyệt.