Python urllib: kết hợp định tuyến proxy với Basic Authentication của trang web
Kết hợp định tuyến urllib và Basic authentication của đích đến trong một opener rõ ràng duy nhất mà không thay thế opener toàn cục hai lần.
Gọi install_opener() hai lần không thêm opener thứ hai vào opener thứ nhất. Nó thay thế opener mặc định của module. Nếu một đối tượng biết proxy và đối tượng khác biết thông tin đăng nhập của trang web, hãy tạo một opener duy nhất chứa các handler cần thiết.
import os
from urllib.request import (ProxyHandler, HTTPBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener)
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(None, 'https://example.com/private/',
os.environ['SITE_USER'], os.environ['SITE_PASSWORD'])
opener = build_opener(
ProxyHandler({'https': 'http://203.0.113.10:8080'}),
HTTPBasicAuthHandler(passwords),
)
with opener.open('https://example.com/private/report', timeout=10) as response:
body = response.read()Proxy và đích đến chỉ là ví dụ. Với một dịch vụ công cộng có thể truy cập qua proxy HTTP công cộng, danh sách proxy HTTP cung cấp các endpoint ứng viên cho handler định tuyến. Opener này định tuyến yêu cầu HTTPS qua proxy HTTP và xử lý thử thách Basic của đích đến. Nó không cấu hình xác thực proxy.
Nếu proxy cũng yêu cầu đăng nhập, hãy chọn riêng một cách bố trí xác thực proxy được hỗ trợ. 407 tại thời điểm CONNECT xảy ra trước khi đích đến có thể phát hành thử thách của chính nó. Thêm thông tin đăng nhập của trang web vào trình quản lý mật khẩu không thể đáp ứng trao đổi trước đó.
Gọi trực tiếp opener.open() giữ cấu hình gắn với thao tác. Không cần thay đổi mặc định toàn module trừ khi ứng dụng cố ý muốn mọi lệnh gọi tiện lợi dùng chung opener này.