Python Requests: окремі Basic-логини для проксі та сайту
Передайте Basic-логін проксі через його URL, а Basic-логін цільового сайту — через аргумент auth у Requests.
Офісний проксі вимагає один обліковий запис. Сайт за ним — інший. У 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()
Чотири змінні облікового запису беруться з конфігурації облікових даних застосунку. Окреме кодування імені користувача та пароля проксі зберігає такі символи, як знак at, не перетворюючи їх на роздільники URL.
Ключ https у словнику вибирає цей шлях для HTTPS-призначення. Його значення досі починається з http://, бо це протокол, яким досягають цього прикладу проксі.
У цьому HTTPS-запиті логін проксі належить обміну CONNECT. Логін сайту належить наступному запиту через встановлений тунель. Якщо адаптер виводить авторизацію проксі з власного URL, вона залишається на потрібному кроці; для цього випадку Basic комбінований клас автентифікації не потрібен.
407 позначає виклик посередника. 401 від сайту позначає виклик призначення. Скористайтеся цією відповіддю, щоб вирішити, який із двох налаштованих облікових записів потребує уваги.