Python urllib: Basic удостоверяване на прокси за HTTP заявки
Изградете явен urllib opener за Basic предизвикателство от HTTP прокси и разграничете тази обикновена HTTP размяна от HTTPS CONNECT удостоверяване.
За Basic предизвикателство от HTTP прокси използвайте ProxyBasicAuthHandler. Този обикновен HTTP пример държи маршрута и профила в един opener:
import os
from urllib.request import (
ProxyHandler, ProxyBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener,
)
proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
None, proxy_url,
os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
ProxyHandler({'http': proxy_url}),
ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
print(response.status)Използвайте реалната крайна точка и профила, предоставен от оператора. Обработчикът използва мениджъра на пароли за предизвикателството на проксито; съответствайте на предвидения прокси URI и realm. Basic удостоверяване в дестинацията използва друг обработчик.
Извикването на opener директно запазва тази настройка локална. URL адресът на заявката остава сайтът, а не посредникът. Този явен HTTP маршрут не криптира Basic размяна.
Не правете извод за поддръжка на HTTPS тунел от този пример. 407 по време на CONNECT се случва при настройката, преди обикновен отговор от дестинацията; избраната интеграция трябва да обработва удостоверяването там. Смяната на обработчика за вход на сайта не може да поправи това по-ранно предизвикателство.
Прокси URL адреси с идентификационни данни са друг формат, срещан в по-стари примери. Ако ги използвате, кодирайте правилно разделителите на URL и дръжте получения URL с тайна извън журналите.