Подешавање прокси заглавља помоћу HTTPAdapter.proxy_headers у Requests-у
Проширите HTTPAdapter.proxy_headers за поље које дефинише прокси, уз задржавање постојећег генерисања заглавља прокси аутентификације у Requests-у.
За заглавље које дефинише оператор проксија, 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-ју није гаранција поверљивости ако га прокси проследи даље.