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