За заглавие што го определува операторот на проксито, Requests го изложува HTTPAdapter.proxy_headers како точка за препишување:

from urllib.parse import urlsplit
import requests
from requests.adapters import HTTPAdapter

class TaggedProxy(HTTPAdapter):
    def proxy_headers(self, proxy):
        headers = super().proxy_headers(proxy)
        endpoint = urlsplit(proxy)
        if (endpoint.scheme == 'http'
                and endpoint.hostname == 'proxy.example'
                and endpoint.port == 8080):
            headers['X-Proxy-Account'] = 'department-a'
        return headers

with requests.Session() as session:
    adapter = TaggedProxy()
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    response = session.get(
        'https://service.example/data',
        proxies={'https': 'http://proxy.example:8080'},
        timeout=15,
    )

X-Proxy-Account е пример за поле што го разбира токму ова прокси, а не стандарден начин за автентикација пред секој посредник.

Започнете со super().proxy_headers(proxy). Requests го користи тој метод за да генерира Proxy-Authorization кога URL-то дава Basic сметка. Замената на целиот резултат може да го загуби тоа однесување.

Адаптерот ги предава овие вредности на ProxyManager на urllib3. Кај HTTPS тунел тие го придружуваат CONNECT. Вообичаеното мапирање на заглавија на барање го опишува подоцнежното барање до целта.

Прокси менаџерите се кешираат по URL на проксито. Не третирајте ја оваа кука како некеширан повратен повик по деловно барање за вредност што мора да се менува при секој повик. Изберете сопственост на транспортот соодветно кога ознаката на сметката се менува.

При обично HTTP препраќање, прокси полињата сè уште бараат предвидената политика за потрошувачка на посредникот. Тоа што заглавието е специфично за прокси во клиентскиот API не е гаранција за доверливост ако проксито го препрати понатаму.

Поврзани статии