Офисный прокси требует одну учётную запись. Сайт за ним — другую. У Requests есть отдельные входы для этих двух Basic-логинов: учётные данные в URL прокси и аргумент auth запроса.

from urllib.parse import quote
import requests

proxy_url = (
    f"http://{quote(proxy_user, safe='')}:"
    f"{quote(proxy_password, safe='')}@proxy.example:8080"
)
response = requests.get(
    "https://reports.example/private/",
    proxies={"https": proxy_url},
    auth=(site_user, site_password),
    timeout=(5, 20),
)
response.raise_for_status()

Четыре переменные учётной записи берутся из конфигурации учётных данных приложения. Раздельное кодирование имени пользователя и пароля прокси сохраняет такие символы, как собака, не превращая их в разделители URL.

Ключ https в словаре выбирает этот путь для HTTPS-назначения. Его значение по-прежнему начинается с http://, потому что это протокол, по которому достигается этот пример прокси.

В этом HTTPS-запросе логин прокси относится к обмену CONNECT. Логин сайта относится к последующему запросу через установленный туннель. Если адаптер выводит авторизацию прокси из собственного URL, она остаётся на нужном шаге; для этого случая Basic комбинированный класс аутентификации не нужен.

407 обозначает запрос посредника. 401 от сайта обозначает запрос назначения. Используйте этот ответ, чтобы решить, какая из двух настроенных учётных записей требует внимания.

Похожие статьи