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 ад сайта пазначае выклік прызначэння. Выкарыстайце гэты адказ, каб вырашыць, які з двух наладжаных уліковых запісаў патрабуе ўвагі.