Python urllib: вимкніть проксі для одного opener
Створіть opener urllib із прямим з’єднанням через ProxyHandler({}), не змінюючи інші клієнти та середовище процесу.
Передайте порожнє відображення до ProxyHandler, якщо один opener urllib має з’єднуватися напряму:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Порожній словник не задає маршрутів через проксі. Якщо відображення не передати, обробник сам виявляє проксі із середовища й налаштувань платформи. Ці два способи створення виражають різні політики.
Приклад використовує стандартну бібліотеку Python і зберігає звичайну перевірку HTTPS. Блок with закриває відповідь, зокрема під час виходу з блока через виняток.
Прямі запити й запити через проксі в одному застосунку
Два об’єкти opener можуть реалізовувати дві політики без зміни змінних середовища між викликами:
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)
Замініть адресу зворотної петлі своїм HTTP-проксі або виберіть кандидата зі списку HTTP-проксі для порівняння через проксі. Він може передавати з’єднання до HTTPS-цілі через CONNECT, якщо сервіс це дозволяє. Протокол і підтримка автентифікації служби прослуховування мають відповідати обробнику.
Не змінюйте opener за замовчуванням
Викликайте direct.open або proxied.open через об’єкт, відповідальний за маршрут. install_opener змінює загальний для процесу opener за замовчуванням, який використовують допоміжні функції urllib, тож бібліотека з таким викликом може вплинути на сторонній код. Для ізольованого opener вище він не потрібен.
Аргумент timeout є налаштуванням операції, а не повною межею фактично минулого часу для кожного передавання. Читайте лише потрібні дані та використовуйте обмеження вищого рівня, якщо завдання має суворий загальний бюджет часу.
Ці об’єкти opener не змінюють клієнт іншої бібліотеки, наявний процес або налаштування проксі браузера.