Python urllib: ਇੱਕ opener ਲਈ ਪ੍ਰੌਕਸੀ ਬੰਦ ਕਰੋ
ਹੋਰ ਕਲਾਇੰਟ ਅਤੇ ਪ੍ਰਕਿਰਿਆ ਦਾ ਵਾਤਾਵਰਨ ਬਦਲੇ ਬਿਨਾਂ ProxyHandler({}) ਨਾਲ ਸਿੱਧਾ ਜੁੜਨ ਵਾਲਾ urllib opener ਬਣਾਓ।
ਜਦੋਂ ਇੱਕ urllib opener ਨੂੰ ਸਿੱਧਾ ਜੁੜਨਾ ਹੋਵੇ ਤਾਂ ProxyHandler ਨੂੰ ਖਾਲੀ ਮੈਪਿੰਗ ਦਿਓ:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
ਖਾਲੀ ਡਿਕਸ਼ਨਰੀ ਕੋਈ ਪ੍ਰੌਕਸੀ ਰਸਤਾ ਨਹੀਂ ਦਿੰਦੀ। ਮੈਪਿੰਗ ਛੱਡ ਦੇਣ ਨਾਲ ਹੈਂਡਲਰ ਵਾਤਾਵਰਨ ਅਤੇ ਪਲੇਟਫਾਰਮ ਸੈਟਿੰਗਾਂ ਤੋਂ ਪ੍ਰੌਕਸੀ ਲੱਭਦਾ ਹੈ। ਬਣਾਉਣ ਦੇ ਇਹ ਦੋ ਢੰਗ ਵੱਖਰੀਆਂ ਨੀਤੀਆਂ ਦੱਸਦੇ ਹਨ।
ਉਦਾਹਰਨ Python ਦੀ ਮਿਆਰੀ ਲਾਇਬ੍ਰੇਰੀ ਵਰਤਦੀ ਹੈ ਅਤੇ ਆਮ HTTPS ਤਸਦੀਕ ਕਾਇਮ ਰੱਖਦੀ ਹੈ। with ਬਲਾਕ ਜਵਾਬ ਬੰਦ ਕਰਦਾ ਹੈ, ਅਪਵਾਦ ਕਾਰਨ ਬਲਾਕ ਤੋਂ ਬਾਹਰ ਨਿਕਲਣ ਵੇਲੇ ਵੀ।
ਇੱਕੋ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਸਿੱਧੀਆਂ ਅਤੇ ਪ੍ਰੌਕਸੀ ਰਾਹੀਂ ਬੇਨਤੀਆਂ
ਦੋ opener ਦੋ ਨੀਤੀਆਂ ਰੱਖ ਸਕਦੇ ਹਨ, ਕਾਲਾਂ ਦੇ ਵਿਚਕਾਰ ਵਾਤਾਵਰਨ ਵੇਰੀਏਬਲ ਬਦਲੇ ਬਿਨਾਂ:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}))
with proxied.open("https://example.com/", timeout=10) as response:
print(response.status)
ਲੂਪਬੈਕ ਪਤੇ ਨੂੰ ਆਪਣੇ HTTP ਪ੍ਰੌਕਸੀ ਨਾਲ ਬਦਲੋ ਜਾਂ ਪ੍ਰੌਕਸੀ ਵਾਲੀ ਤੁਲਨਾ ਲਈ HTTP ਪ੍ਰਾਕਸੀ ਸੂਚੀ ਵਿੱਚੋਂ ਉਮੀਦਵਾਰ ਚੁਣੋ। ਸੇਵਾ ਇਜਾਜ਼ਤ ਦੇਵੇ ਤਾਂ ਇਹ HTTPS ਟੀਚੇ ਦਾ ਕਨੈਕਸ਼ਨ CONNECT ਰਾਹੀਂ ਲਿਜਾ ਸਕਦਾ ਹੈ। ਲਿਸਨਰ ਦਾ ਪ੍ਰੋਟੋਕੋਲ ਅਤੇ ਪ੍ਰਮਾਣੀਕਰਨ ਸਹਿਯੋਗ ਹੈਂਡਲਰ ਨਾਲ ਮੇਲ ਖਾਣੇ ਚਾਹੀਦੇ ਹਨ।
ਡਿਫ਼ੌਲਟ opener ਨਾ ਬਦਲੋ
ਰਸਤੇ ਲਈ ਜ਼ਿੰਮੇਵਾਰ ਆਬਜੈਕਟ ਰਾਹੀਂ direct.open ਜਾਂ proxied.open ਕਾਲ ਕਰੋ। install_opener urllib ਦੀਆਂ ਸਹੂਲਤ ਕਾਲਾਂ ਵੱਲੋਂ ਵਰਤੇ ਜਾਂਦੇ ਪੂਰੀ ਪ੍ਰਕਿਰਿਆ ਦੇ ਡਿਫ਼ੌਲਟ ਨੂੰ ਬਦਲਦਾ ਹੈ; ਇਸ ਲਈ ਇਸ ਨੂੰ ਵਰਤਣ ਵਾਲੀ ਲਾਇਬ੍ਰੇਰੀ ਬੇਸਬੰਧ ਕੋਡ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰ ਸਕਦੀ ਹੈ। ਉੱਪਰਲੇ ਅਲੱਗ opener ਲਈ ਇਸ ਦੀ ਲੋੜ ਨਹੀਂ।
timeout ਆਰਗੂਮੈਂਟ ਇੱਕ ਕਾਰਵਾਈ ਦੀ ਸੈਟਿੰਗ ਹੈ, ਹਰ ਟ੍ਰਾਂਸਫਰ ਦੇ ਪੂਰੇ ਅਸਲ ਸਮੇਂ ਦੀ ਹੱਦ ਨਹੀਂ। ਕੰਮ ਲਈ ਲੋੜੀਂਦਾ ਡਾਟਾ ਹੀ ਪੜ੍ਹੋ ਅਤੇ ਸਖ਼ਤ ਕੁੱਲ ਸਮਾਂ ਸੀਮਾ ਹੋਵੇ ਤਾਂ ਉੱਚ ਪੱਧਰ ਦੀ ਮਿਆਦ ਵਰਤੋ।
ਇਹ opener ਆਬਜੈਕਟ ਦੂਜੀ ਲਾਇਬ੍ਰੇਰੀ ਦਾ ਕਲਾਇੰਟ, ਮੌਜੂਦਾ ਪ੍ਰਕਿਰਿਆ ਜਾਂ ਬ੍ਰਾਊਜ਼ਰ ਦੀ ਪ੍ਰੌਕਸੀ ਸੈਟਿੰਗ ਨਹੀਂ ਬਦਲਦੇ।