Подайте празно съпоставяне на 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 обекти не променят клиента на друга библиотека, съществуващ процес или прокси настройките на браузъра.

Подобни статии