Nastavitev proxy glav s HTTPAdapter.proxy_headers v Requests
Razširite HTTPAdapter.proxy_headers za polje, ki ga določi proxy, ob ohranitvi obstoječega ustvarjanja glave za proxy preverjanje pristnosti v Requests.
Za glavo, ki jo določi upravitelj proxyja, Requests izpostavi HTTPAdapter.proxy_headers kot točko prepisa:
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 je primer polja, ki ga razume prav ta proxy, in ne standardni način preverjanja pristnosti pri vsakem posredniku.
Začnite s super().proxy_headers(proxy). Requests uporablja to metodo za ustvarjanje Proxy-Authorization, ko URL priskrbi račun Basic. Zamenjava celotnega rezultata lahko izgubi to vedenje.
Adapter posreduje te vrednosti v ProxyManager iz urllib3. V tunelu HTTPS spremljajo CONNECT. Običajno preslikavanje glav zahteve opisuje poznejšo zahtevo na cilj.
Upravitelji proxyja se predpomnijo po URL-ju proxyja. Tega kavlja ne obravnavajte kot nepredpomnjen povratni klic na poslovno zahtevo za vrednost, ki se mora spremeniti ob vsakem klicu. Ko se oznaka računa spreminja, izberite lastništvo prenosa v skladu s tem.
Pri navadnem posredovanju HTTP proxy polja še vedno potrebujejo predvideno politiko porabe posrednika. Da je glava v odjemalčevem API-ju specifična za proxy, ni jamstvo zaupnosti, če jo proxy posreduje naprej.