Python urllib: базова автентифікація проксі для HTTP-запитів
Побудуйте явний opener urllib для запиту Basic від HTTP-проксі та відрізніть цей звичайний обмін HTTP від автентифікації HTTPS CONNECT.
Для запиту Basic від HTTP-проксі використовуйте ProxyBasicAuthHandler. Цей звичайний приклад HTTP тримає маршрут і обліковий запис в одному 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)Використовуйте реальну кінцеву точку та обліковий запис, наданий оператором. Обробник використовує менеджер паролів для запиту проксі; зіставте потрібні URI і realm проксі. Базова автентифікація на призначенні використовує інший обробник.
Прямий виклик opener зберігає це налаштування локальним. URL запиту залишається сайтом, а не посередником. Цей відкритий маршрут HTTP не шифрує обмін Basic.
Не робіть із цього прикладу висновку про підтримку тунелю HTTPS. 407 під час CONNECT виникає на етапі налаштування, до звичайної відповіді призначення; обрана інтеграція має обробляти автентифікацію там. Зміна обробника входу на сайті не виправить той раніший запит.
URL проксі з обліковими даними — інший формат, що трапляється в старих прикладах. Якщо ви його використовуєте, коректно кодуйте роздільники URL і тримайте отриманий URL із секретом поза журналами.