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 змяняе агульнае для працэсу значэнне па змаўчанні, якое выкарыстоўваюць дапаможныя функцыі urllib, таму бібліятэка з такім выклікам можа закрануць старонні код. Для ізаляванага opener вышэй гэта непатрэбна.
Аргумент timeout — налада аперацыі, а не поўны ліміт фактычнага часу кожнай перадачы. Чытайце толькі патрэбныя даныя і ўжывайце абмежаванне вышэйшага ўзроўню, калі задача мае строгі агульны бюджэт часу.
Гэтыя аб’екты opener не змяняюць кліент іншай бібліятэкі, існуючы працэс або налады проксі браўзера.