Chuyển đổi các mục IPv4 ip:port:user:password cho Requests
Phân tách ip:port:user:password bằng cách chia có giới hạn và mã hóa các thành phần thông tin đăng nhập trước khi dựng bản đồ proxy.
Với định dạng IPv4 ip:port:user:password của nhà cung cấp proxy HTTP, hãy chuyển đổi các trường trước khi đưa giá trị cho Requests:
from ipaddress import IPv4Address
from urllib.parse import quote
def proxy_map(line):
host, port, user, password = line.rstrip('\r\n').split(':', 3)
host = str(IPv4Address(host))
port = int(port)
if not 1 <= port <= 65535:
raise ValueError('Proxy port is out of range')
credentials = quote(user, safe='') + ':' + quote(password, safe='')
url = f'http://{credentials}@{host}:{port}'
return {'http': url, 'https': url}
Cách chia có giới hạn giữ lại mọi dấu hai chấm bổ sung bên trong mật khẩu. Chỉ loại bỏ ký tự xuống dòng cũng tránh việc âm thầm cắt bỏ khoảng trắng có thể thuộc về thông tin đăng nhập.
Mã hóa tên người dùng và mật khẩu thành các thành phần URL riêng biệt. Dấu @ trong mật khẩu thô không được nhầm với dấu phân cách trước host proxy. Hàm này mong đợi thông tin đăng nhập thô; truyền văn bản đã mã hóa có thể khiến dấu phần trăm bị mã hóa lần nữa.
Bản đồ trả về chọn proxy này cho các đích HTTP và HTTPS. Một khóa như http://192.0.2.10 có ý nghĩa khác trong Requests: nó chọn một tuyến cho host đích đó. Nó không phải chỉ mục cho một nhóm máy chủ proxy.
Bộ phân tích cố ý chấp nhận định dạng IPv4 đã nêu. Nó không bao gồm tên người dùng có dấu hai chấm hoặc địa chỉ IPv6 không có dấu ngoặc; những trường hợp đó cần định dạng đầu vào không mơ hồ. Giữ các URL có thông tin đăng nhập được tạo ra xa khỏi nhật ký thường ngày.