Перадайце пустое адлюстраванне ў 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 не змяняюць кліент іншай бібліятэкі, існуючы працэс або налады проксі браўзера.

Падобныя артыкулы