Փրոքսի վերնագրերի սահմանում 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)-ից։ Requests-ը օգտագործում է այդ մեթոդը Proxy-Authorization ստեղծելու համար, երբ URL-ը տալիս է Basic հաշիվ։ Ամբողջ արդյունքը փոխարինելը կարող է կորցնել այդ վարքը։
Ադապտերը այդ արժեքները փոխանցում է urllib3-ի ProxyManager-ին։ HTTPS թունելի դեպքում դրանք ուղեկցում են CONNECT-ին։ Սովորական հարցման վերնագրերի քարտեզը նկարագրում է ավելի ուշ նպատակակետ հարցումը։
Փրոքսի մենեջերները քեշվում են ըստ փրոքսի URL-ի։ Մի՛ ընկալեք այս կեռիկը որպես չքեշավորված՝ յուրաքանչյուր գործարարական հարցման համար callback այն արժեքի համար, որը պետք է փոխվի յուրաքանչյուր կանչում։ Ընտրեք տրանսպորտի պատկանելությունը համապատասխանաբար, երբ հաշվի նշիչը փոփոխվում է։
Պարզ HTTP փոխանցման դեպքում փրոքսի դաշտերը դեռ պետք է միջնորդի նախատեսած սպառման քաղաքականությունը։ Այն, որ վերնագիրը փրոքսի-հատուկ է հաճախորդի API-ում, գաղտնիության երաշխիք չէ, եթե փրոքսին այն փոխանցում է առաջ։