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-ээр кэшлэгддэг. Дуудлага бүрт өөрчлөгдөх ёстой утгын хувьд энэ дэгээг кэшгүй, бизнес хүсэлт бүрийн callback гэж бүү үзээрэй. Бүртгэлийн тэмдэг өөрчлөгдөх үед тээврийн эзэмшлийг түүнд нийцүүлэн сонгоно.
Энгийн HTTP дамжуулалтад прокси талбаруудад зуучлагчийн зорьсон хэрэглээний бодлого орсоор хэрэгтэй. Толгой нь клиентийн API-д прокси-тусгай байх нь прокси түүнийг цааш дамжуулбал нууцлалын баталгаа биш.