Requests'тин HTTPAdapter.proxy_headers аркылуу прокси баш сөздөрүн орнотуу
Прокси аныктаган талаа үчүн 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) менен баштаңыз. URL Basic эсебин бергенде Requests ошол ыкманы Proxy-Authorization жасоо үчүн колдонот. Бүт натыйжаны алмаштыруу бул жүрүм-турумду жоготушу мүмкүн.
Адаптер бул маанилерди urllib3'түн ProxyManagerине өткөрөт. HTTPS туннелинде алар CONNECT менен кошо барат. Кадимки сурам баш сөздөрүнүн картасы кийинки багыт сурамын сүрөттөйт.
Прокси менеджерлери прокси URL боюнча кэштелет. Ар бир чакырууда өзгөрүшү керек болгон маани үчүн бул илгичти кэштелбеген, ар бир бизнес сурамына байланган кайтарым чакыруу деп эсептебеңиз. Эсеп белгиси өзгөргөндө транспорт ээлигин ошого ылайык тандаңыз.
Жөнөкөй HTTP өткөрүүдө прокси талааларына дагы эле ортомчунун көздөгөн керектөө саясаты керек. Баш сөздүн клиент APIсинде проксиге таандык болушу, прокси аны андан ары өткөрсө, купуялуулуктун кепилдиги эмес.