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 ਵਿੱਚ ਹੈਡਰ ਦਾ ਪ੍ਰੌਕਸੀ-ਖ਼ਾਸ ਹੋਣਾ ਗੋਪਨੀਯਤਾ ਦੀ ਗਾਰੰਟੀ ਨਹੀਂ, ਜੇ ਪ੍ਰੌਕਸੀ ਇਸਨੂੰ ਅੱਗੇ ਭੇਜਦਾ ਹੈ।