Requests HTTPAdapter.proxy_headers yordamida proxy sarlavhalarini sozlash
Proxy belgilagan maydon uchun HTTPAdapter.proxy_headers ni kengaytirish va Requests ning mavjud proxy autentifikatsiya sarlavhasi yaratilishini saqlab qolish.
Proxy operatori belgilagan sarlavha uchun Requests HTTPAdapter.proxy_headers ni qayta belgilash nuqtasi sifatida taqdim etadi:
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 aynan shu proxy tushunadigan maydonga misol, har bir vositachi bilan autentifikatsiya qilishning standart usuli emas.
super().proxy_headers(proxy) dan boshlang. URL Basic hisobini taqdim etganda Requests shu usuldan Proxy-Authorization yaratish uchun foydalanadi. Butun natijani almashtirish bu xatti-harakatni yo'qotishi mumkin.
Adapter bu qiymatlarni urllib3 ning ProxyManager obyektiga uzatadi. HTTPS tunnelida ular CONNECT bilan birga boradi. Oddiy so'rov sarlavhalari xaritasi keyingi manzil so'rovini tavsiflaydi.
Proxy menejerlari proxy URL bo'yicha keshlanadi. Har bir chaqiruvda o'zgarishi kerak bo'lgan qiymat uchun bu ilgakni keshlanmagan, har bir biznes so'roviga bog'langan qayta chaqiruv deb hisoblamang. Hisob belgisi o'zgarganda transport egaligini shunga mos tanlang.
Oddiy HTTP uzatishda proxy maydonlari hali ham vositachining ko'zda tutilgan iste'mol siyosatiga muhtoj. Sarlavhaning mijoz API sida proxyga xos bo'lishi, proxy uni oldinga uzatsa, maxfiylik kafolati emas.