Za zaglavlje koje definira operator proxyja, Requests izlaže HTTPAdapter.proxy_headers kao točku za prepisivanje:

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 primjer je polja koje razumije upravo ovaj proxy, a ne standardni način autentifikacije prema svakom posredniku.

Počnite s super().proxy_headers(proxy). Requests rabi tu metodu za stvaranje Proxy-Authorization kada URL sadrži Basic račun. Zamjena cijelog rezultata može izgubiti to ponašanje.

Adapter prosljeđuje te vrijednosti u ProxyManager iz urllib3. Kod HTTPS tunela prate CONNECT. Uobičajeno preslikavanje zaglavlja zahtjeva opisuje kasniji zahtjev prema odredištu.

Upravitelji proxyja keširaju se po URL-u proxyja. Ne tretirajte ovu kuku kao nekeširani povratni poziv po poslovnom zahtjevu za vrijednost koja se mora mijenjati pri svakom pozivu. Odaberite vlasništvo prijenosa u skladu s tim kada se oznaka računa mijenja.

Kod običnog HTTP prosljeđivanja proxy polja i dalje trebaju namjeravanu politiku potrošnje posrednika. To što je zaglavlje specifično za proxy u klijentskom API-ju nije jamstvo povjerljivosti ako ga proxy proslijedi dalje.

Povezani članci