Requests نىڭ HTTPAdapter.proxy_headers ئارقىلىق proxy تېمىسىنى تەڭشەش
Proxy بەلگىلىگەن ساھە ئۈچۈن HTTPAdapter.proxy_headers نى كېڭەيتىش، Requests نىڭ مەۋجۇت proxy دەلىللەش تېمىسىنى ھاسىل قىلىشىنى ساقلاپ قېلىش.
Proxy باشقۇرغۇچى بەلگىلىگەن تېما ئۈچۈن، 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 دەل مۇشۇ proxy چۈشىنىدىغان ساھەنىڭ مىسالى، ھەر قانداق ۋاسىتىچى بىلەن دەلىللەشنىڭ ئۆلچەملىك ئۇسۇلى ئەمەس.
super().proxy_headers(proxy) دىن باشلاڭ. URL Basic ھېساباتىنى تەمىنلىگەندە Requests شۇ ئۇسۇلنى Proxy-Authorization ھاسىل قىلىشقا ئىشلىتىدۇ. پۈتۈن نەتىجىنى ئالماشتۇرۇش بۇ ھەرىكەتنى يوقىتىشى مۇمكىن.
ئاداپتېر بۇ قىممەتلەرنى urllib3 نىڭ ProxyManager غا يەتكۈزىدۇ. HTTPS يولىدا ئۇلار CONNECT بىلەن بىللە ماڭىدۇ. ئادەتتىكى تەلەپ تېمىسى خەرىتىسى كېيىنكى مەنزىل تەلىپىنى چۈشەندۈرىدۇ.
Proxy باشقۇرغۇچىلىرى proxy URL بويىچە ساقلىنىدۇ. ھەر چاقىرىقتا ئۆزگىرىشى كېرەك بولغان قىممەت ئۈچۈن بۇ ئىلمەكنى ساقلانمىغان، ھەر سودا تەلىپىگە قارىتىلغان قايتۇرۇش چاقىرىقى دەپ قارىماڭ. ھېسابات بەلگىسى ئۆزگەرگەندە توشۇش ئىگىلىكىنى شۇنىڭغا ماسلاشتۇرۇپ تاللاڭ.
ئادەتتىكى HTTP يەتكۈزۈشتە proxy ساھەلىرى يەنىلا ۋاسىتىچىنىڭ مەقسەتلىك ئىشلىتىش سىياسىتىگە موھتاج. تېمىنىڭ خېرىدار API دا proxy گە خاس بولۇشى، proxy ئۇنى ئىلگىرى يەتكۈزسە مەخپىيەتلىك كاپالىتى ئەمەس.