Requests-in HTTPAdapter.proxy_headers ilə proxy başlıqlarının qurulması
Proxy operatorunun təyin etdiyi sahə üçün HTTPAdapter.proxy_headers-i genişləndirmək və Requests-in mövcud proxy autentifikasiya başlığı yaratmasını saxlamaq.
Proxy operatorunun təyin etdiyi başlıq üçün Requests HTTPAdapter.proxy_headers-i əvəzetmə nöqtəsi kimi təqdim edir:
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 məhz bu proxy-nin başa düşdüyü sahəyə nümunədir, hər vasitəçi ilə autentifikasiya üçün standart üsul deyil.
super().proxy_headers(proxy) ilə başlayın. URL Basic hesab təqdim etdikdə Requests həmin metoddan Proxy-Authorization yaratmaq üçün istifadə edir. Bütün nəticəni əvəz etmək bu davranışı itirə bilər.
Adapter bu dəyərləri urllib3-ün ProxyManager obyektinə ötürür. HTTPS tuneli üçün onlar CONNECT ilə birlikdə gedir. Adi sorğu başlıqları xəritəsi sonrakı təyinat sorğusunu təsvir edir.
Proxy menecerləri proxy URL-i üzrə keşlənir. Bu qarmağı hər çağırışda dəyişməli olan dəyər üçün keşlənməyən, hər biznes sorğusuna bağlı callback kimi qəbul etməyin. Hesab markeri dəyişdikdə transport sahibliyini buna uyğun seçin.
Adi HTTP yönləndirməsində proxy sahələri hələ də vasitəçinin nəzərdə tutduğu istehlak siyasətinə ehtiyac duyur. Başlığın müştəri API-də proxy-yə xas olması, proxy onu irəli ötürdükdə məxfilik zəmanəti deyil.