Python urllib: изключете прокситата за един opener
Създайте urllib opener с директна връзка чрез ProxyHandler({}), без да променяте другите клиенти и средата на процеса.
Подайте празно съпоставяне на ProxyHandler, когато един urllib opener трябва да се свързва директно:
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)
Заменете loopback адреса със своя HTTP прокси или изберете кандидат от списъка с HTTP проксита за сравнението през прокси. Той може да пренася връзката към HTTPS целта чрез CONNECT, когато услугата го позволява. Протоколът и поддръжката за удостоверяване на слушателя трябва да съответстват на обработчика.
Не променяйте opener по подразбиране
Извиквайте direct.open или proxied.open чрез обекта, който отговаря за маршрута. install_opener променя настройката по подразбиране за целия процес, използвана от помощните функции на urllib; библиотека, която го използва, може да засегне несвързан код. Това не е нужно за изолирания opener по-горе.
Аргументът timeout е настройка за операция, а не пълен краен срок по реално време за всяко прехвърляне. Четете само нужните данни и използвайте краен срок на по-високо ниво, ако задачата има строг общ времеви бюджет.
Тези opener обекти не променят клиента на друга библиотека, съществуващ процес или прокси настройките на браузъра.