ਪ੍ਰੌਕਸੀ ਚੈਕਰਾਂ ਵਿੱਚ ਗਲੋਬਲ urllib opener ਬਦਲਾਅ ਤੋਂ ਬਚੋ
urllib ਪ੍ਰੌਕਸੀ ਜਾਂਚਾਂ ਨੂੰ ਉਹਨਾਂ ਦੇ ਆਪਣੇ opener ਤੱਕ ਸੀਮਿਤ ਰੱਖੋ, ਪੂਰੀ ਪ੍ਰਕਿਰਿਆ ਦੇ ਰਾਊਟਿੰਗ ਅਤੇ ਟਾਈਮਆਊਟ ਡਿਫਾਲਟ ਬਦਲਣ ਦੀ ਥਾਂ।
from urllib.request import ProxyHandler, build_opener
def make_proxy_opener(proxy_uri):
return build_opener(ProxyHandler({
"http": proxy_uri,
"https": proxy_uri,
}))
opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.ਜਦੋਂ ਰਸਤਾ ਜਾਂਚ ਦਾ ਹੋਵੇ ਤਾਂ ਇਸ opener ਦੀ ਆਪਣੀ open ਵਿਧੀ ਨੂੰ ਕਾਲ ਕਰੋ। ਉਦਾਹਰਨ ਦਾ HTTP ਐਂਡਪੌਇੰਟ ਤੁਹਾਡੀ ਸੇਵਾ ਜਾਂ ਜਨਤਕ ਜਾਂਚਾਂ ਲਈ HTTP ਪ੍ਰੌਕਸੀ ਸੂਚੀ ਤੋਂ ਆ ਸਕਦਾ ਹੈ। ਇਹ ਹਿੱਸਾ ਮਾਲਕੀਅਤ ਦਰਸਾਉਂਦਾ ਹੈ; ਇਹ ਪੂਰੀ ਪ੍ਰਮਾਣਿਕਤਾ ਜਾਂ ਸਿਹਤ ਨੀਤੀ ਪਰਿਭਾਸ਼ਿਤ ਨਹੀਂ ਕਰਦਾ। ਖਾਤਾ-ਖਾਸ ਕੋਈ ਵੀ handler ਉਸੇ ਇੱਛਤ ਕਲਾਇੰਟ ਨਾਲ ਜੁੜਿਆ ਰੱਖੋ।
urllib.request.install_opener() ਪ੍ਰਕਿਰਿਆ-ਵਿਆਪੀ ਡਿਫਾਲਟ ਬਦਲਦਾ ਹੈ ਜੋ ਬਾਅਦ ਦੀਆਂ module-ਪੱਧਰੀ urlopen() ਕਾਲਾਂ ਵਰਤਦੀਆਂ ਹਨ। ਇਸ ਲਈ ਪ੍ਰੌਕਸੀਆਂ ਵਿੱਚ ਘੁੰਮਣ ਵਾਲਾ ਚੈਕਰ ਅਸੰਬੰਧਿਤ ਬੇਨਤੀਆਂ ਨੂੰ ਆਪਣੇ ਆਖਰੀ ਐਂਡਪੌਇੰਟ ਉੱਤੇ ਛੱਡ ਸਕਦਾ ਹੈ। ਅਸਥਾਈ ਤੌਰ 'ਤੇ ਸਥਾਪਿਤ ਕਰਨਾ ਅਤੇ ਸਫਾਈ ਵੇਲੇ ਬਹਾਲ ਕਰਨਾ ਫਿਰ ਵੀ ਸਾਂਝੇ ਬਦਲਾਅ ਦੌਰਾਨ ਸਮਕਾਲੀ ਬੇਨਤੀਆਂ ਨੂੰ ਚੱਲਣ ਦਿੰਦਾ ਹੈ।
socket.setdefaulttimeout() ਇਸੇ ਤਰ੍ਹਾਂ ਬਾਅਦ ਵਿੱਚ ਬਣੇ socket ਲਈ ਡਿਫਾਲਟ ਬਦਲਦਾ ਹੈ। ਜਦੋਂ ਸਿਰਫ਼ ਜਾਂਚ ਨੂੰ ਹੀ ਇਹ ਮਿਲਣਾ ਚਾਹੀਦਾ ਹੈ ਤਾਂ ਓਪਰੇਸ਼ਨ-ਪੱਧਰੀ ਟਾਈਮਆਊਟ ਵਰਤੋ।
ਜਾਂਚ ਦੇ ਜਵਾਬ ਬੰਦ ਕਰੋ ਅਤੇ ਨਤੀਜੇ ਖਾਸ ਰੱਖੋ: HTTP ਗਲਤੀ ਜਵਾਬ ਆਪਣੇ ਆਪ ਮਰੇ ਪ੍ਰੌਕਸੀ ਸਰੋਤਾ ਨਹੀਂ ਹੁੰਦਾ। ਜੇ async ਸੇਵਾ ਵਿੱਚ synchronous urllib ਜਾਂਚ ਵਰਤੀ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਰੋਕਣ ਵਾਲਾ ਕੰਮ ਢੁੱਕਵੇਂ worker ਕੋਲ ਭੇਜੋ; ਉਹ ਲਾਗੂ ਕਰਨ ਦਾ ਫੈਸਲਾ ਗਲੋਬਲ opener ਬਦਲਾਅ ਨੂੰ ਵੱਖਰਾ ਨਹੀਂ ਕਰਦਾ।
ਜਾਂਚ ਨੂੰ ਕੋਈ ਹੋਰ ਨੈੱਟਵਰਕ ਨੀਤੀ ਪਿੱਛੇ ਛੱਡੇ ਬਿਨਾਂ ਆਪਣਾ ਨਿਰੀਖਣ ਵਾਪਸ ਦੇਣਾ ਚਾਹੀਦਾ ਹੈ। ਇਸਦੀ ਆਪਣੀ ਕਲਾਇੰਟ ਵਸਤੂ ਅਤੇ ਸੀਮਿਤ ਕਾਰਵਾਈ ਉਸ ਸੀਮਾ ਨੂੰ ਸਪੱਸ਼ਟ ਕਰਦੇ ਹਨ।