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)
Замените адресу повратне петље својим HTTP проксијем или изаберите кандидата са листе HTTP проксија за поређење преко проксија. Он може да пренесе везу до HTTPS одредишта преко CONNECT-а ако сервис то допушта. Протокол и подршка за аутентификацију слушајућег сервиса морају да одговарају руковаоцу.
Не мењајте подразумевани opener
Позивајте direct.open или proxied.open преко објекта одговорног за путању. install_opener мења подразумевани објекат за цео процес који користе помоћне функције urllib-а; библиотека која га користи зато може да утиче на неповезан код. Није потребан за издвојени opener изнад.
Аргумент timeout је подешавање операције, а не потпуно ограничење стварног протеклог времена сваког преноса. Читајте само потребне податке и користите рок вишег нивоа ако задатак има строго укупно временско ограничење.
Ови opener објекти не мењају клијента друге библиотеке, постојећи процес или прокси подешавања прегледача.