Проследите празно мапирање у 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 објекти не мењају клијента друге библиотеке, постојећи процес или прокси подешавања прегледача.

Повезани чланци