Офисното прокси иска една сметка. Сайтът зад него иска друга. 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 от сайта означава предизвикателство от дестинацията. Използвайте този отговор, за да решите коя от двете конфигурирани сметки се нуждае от внимание.

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