Python urllib: xác thực Basic của proxy cho các yêu cầu HTTP
Dựng một opener urllib tường minh cho thử thách Basic từ proxy HTTP, và phân biệt trao đổi HTTP thông thường này với xác thực HTTPS CONNECT.
Với thử thách Basic từ một proxy HTTP, hãy dùng ProxyBasicAuthHandler. Ví dụ HTTP thông thường này giữ tuyến và tài khoản trong một opener:
import os
from urllib.request import (
ProxyHandler, ProxyBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener,
)
proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
None, proxy_url,
os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
ProxyHandler({'http': proxy_url}),
ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
print(response.status)Dùng điểm cuối thật và tài khoản do nhà vận hành cung cấp. Bộ xử lý dùng trình quản lý mật khẩu cho thử thách của proxy; khớp URI và realm dự kiến của proxy. Xác thực Basic ở đích dùng một bộ xử lý khác.
Gọi opener trực tiếp giữ thiết lập này tại máy cục bộ. URL của yêu cầu vẫn là trang web, không phải bên trung gian. Tuyến HTTP rõ ràng này không mã hoá một trao đổi Basic.
Đừng suy ra hỗ trợ đường hầm HTTPS từ ví dụ này. 407 trong CONNECT xảy ra lúc thiết lập, trước phản hồi thông thường của đích; tích hợp được chọn phải xử lý xác thực tại đó. Đổi bộ xử lý đăng nhập của trang web không thể sửa thử thách trước đó.
URL proxy mang thông tin xác thực là một định dạng khác xuất hiện trong các ví dụ cũ hơn. Nếu dùng, hãy mã hoá đúng các dấu phân cách URL và giữ URL chứa bí mật ngoài nhật ký.