Python Requests ਵਿੱਚ proxy IP ਦੀ ਵਰਤੋਂ
Requests ਵਿੱਚ ਹਰ ਬੇਨਤੀ ਲਈ proxy ਰਸਤੇ ਸਪਸ਼ਟ ਕਰੋ, endpoint ਦਾ ਸਹੀ scheme ਚੁਣੋ ਅਤੇ timeout ਤੇ HTTPS tunnel ਦੀਆਂ ਨਾਕਾਮੀਆਂ ਸੰਭਾਲੋ।
ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ Requests ਉਪਲਬਧ ਹੋਵੇ ਤਾਂ ਕਾਲ ਨੂੰ proxy mapping ਦਿਓ:
import requests
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)
loopback endpoint ਦੀ ਥਾਂ ਆਪਣਾ ਚੱਲਦਾ proxy ਜਾਂ HTTP proxy ਸੂਚੀ ਵਿਚਲਾ ਕੋਈ ਉਮੀਦਵਾਰ ਦਿਓ ਜਿਸ ਨੂੰ ਤੁਸੀਂ ਇਸ ਬੇਨਤੀ ਨਾਲ ਪਰਖੋਗੇ। key ਮੰਜ਼ਿਲ ਦੇ scheme ਦੱਸਦੇ ਹਨ: HTTP URL ਲਈ http ਅਤੇ HTTPS URL ਲਈ https। value proxy listener ਦੱਸਦੇ ਹਨ। ਜੇ ਨੈੱਟਵਰਕ ਨੂੰ ਵੱਖਰੇ ਰਸਤੇ ਚਾਹੀਦੇ ਹੋਣ ਤਾਂ ਇਹ ਵੱਖਰੇ endpoint ਹੋ ਸਕਦੇ ਹਨ।
proxy value http:// ਨੂੰ https key ਹੇਠ ਰੱਖਣਾ ਜਾਣਬੁੱਝ ਕੇ ਕੀਤਾ ਗਿਆ ਹੈ। Requests HTTP listener ਤੋਂ CONNECT tunnel ਮੰਗਦਾ ਹੈ ਅਤੇ ਫਿਰ ਉਸ ਰਾਹੀਂ ਮੰਜ਼ਿਲ ਨਾਲ TLS ਕਾਇਮ ਕਰਦਾ ਹੈ; ਇਹ proxy ਦੀ ਮੰਜ਼ਿਲ ਅਤੇ port ਨੀਤੀ ਅਧੀਨ ਹੈ। value ਨੂੰ https:// ਕਰਨ ਨਾਲ ਖ਼ੁਦ proxy ਤੱਕ TLS ਮੰਗਿਆ ਜਾਂਦਾ ਹੈ; ਜੇ listener ਬਿਨਾਂ ਇਨਕ੍ਰਿਪਸ਼ਨ ਵਾਲੇ HTTP ਦੀ ਉਡੀਕ ਕਰਦਾ ਹੋਵੇ ਤਾਂ ਇਹ ਨਾਕਾਮ ਹੋ ਸਕਦਾ ਹੈ।
timeout ਦੇ ਦੋ ਅੰਕਾਂ ਦਾ ਅਰਥ
timeout=(5, 15) ਕੁਨੈਕਸ਼ਨ ਅਤੇ ਪੜ੍ਹਨ ਦੇ timeout ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ। ਇਹ ਕੁੱਲ ਪੰਦਰਾਂ ਸਕਿੰਟ ਦੀ ਆਖ਼ਰੀ ਹੱਦ ਨਹੀਂ ਲਗਾਉਂਦਾ। ਵਕਫ਼ੇ ਨਾਲ ਆਉਂਦਾ ਡਾਟਾ, ਕਈ ਪਤੇ ਅਤੇ ਕੁਨੈਕਸ਼ਨ ਦੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਬੀਤਿਆ ਸਮਾਂ ਵਧਾ ਸਕਦੀਆਂ ਹਨ। ਇਹ ਸੈਟਿੰਗ ਛੱਡਣ ਉੱਤੇ Requests ਕੋਈ ਆਮ timeout ਨਹੀਂ ਦਿੰਦਾ। ਇਸ ਲਈ ਜਵਾਬ ਮੁਤਾਬਕ ਹੱਦਾਂ ਚੁਣੋ ਅਤੇ ਜੇ ਕੰਮ ਨੂੰ ਸਖ਼ਤ ਕੁੱਲ ਸਮਾਂ ਸੀਮਾ ਚਾਹੀਦੀ ਹੈ ਤਾਂ application ਪੱਧਰ ਦੀ deadline ਜੋੜੋ।
ਨਾਕਾਮੀ ਨੂੰ ਉਸੇ ਪੜਾਅ ਉੱਤੇ ਸੰਭਾਲੋ ਜਿੱਥੇ ਇਹ ਹੁੰਦੀ ਹੈ
try:
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
except requests.exceptions.ProxyError as error:
print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
print("HTTP status:", error.response.status_code)
CONNECT ਰੱਦ ਹੋਣ ਨਾਲ ਮੰਜ਼ਿਲ ਦਾ ਜਵਾਬ ਆਉਣ ਤੋਂ ਪਹਿਲਾਂ ProxyError ਹੋ ਸਕਦਾ ਹੈ। ਗ਼ਲਤੀ ਵਾਲੇ status ਦਾ ਜਵਾਬ ਮਿਲਣ ਤੋਂ ਬਾਅਦ HTTPError ਸ਼ਾਖਾ ਆਉਂਦੀ ਹੈ; Timeout ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਨਿਰਧਾਰਤ ਹੱਦ ਮੁੱਕ ਗਈ। ਕੁਨੈਕਸ਼ਨ ਬਣਾਉਣ ਦੀ exception chain ਸਥਾਨਕ ਤੌਰ ਉੱਤੇ ਜਾਂਚੋ ਅਤੇ ਸਾਂਝੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਪ੍ਰਮਾਣ ਪੱਤਰ ਵਾਲੇ endpoint ਅਤੇ ਨਿੱਜੀ URL ਹਟਾ ਦਿਓ।
ਸਰਟੀਫਿਕੇਟ ਦੀ ਜਾਂਚ ਚਾਲੂ ਰੱਖੋ। ਜੇ ਅਧਿਕਾਰਤ ਨੈੱਟਵਰਕ ਨਿੱਜੀ CA ਜਾਂ ਪ੍ਰਬੰਧਿਤ interception ਵਰਤਦਾ ਹੈ ਤਾਂ ਜਾਂਚ ਬੰਦ ਕਰਨ ਦੀ ਥਾਂ ਉਮੀਦ ਕੀਤੀ trust material ਦਿਓ।
ਹਰ ਬੇਨਤੀ ਲਈ ਸਪਸ਼ਟ entry ਇੱਥੇ ਦਿੱਤੇ ਰਸਤੇ ਕਾਬੂ ਕਰਦੀਆਂ ਹਨ, ਪਰ ਛੱਡੇ scheme ਉੱਤੇ environment ਤੋਂ proxy ਲੱਭਣ ਦਾ ਅਸਰ ਅਜੇ ਵੀ ਹੋ ਸਕਦਾ ਹੈ। ਕਾਲ ਨੂੰ ਮੁੜ ਵਰਤੀ ਜਾ ਸਕਣ ਵਾਲੀ Session ਵਿੱਚ ਲਿਜਾਂਦੇ ਸਮੇਂ ਤੈਅ ਕਰੋ ਕਿ environment variable, Session ਦੇ default ਅਤੇ ਹਰ ਬੇਨਤੀ ਦੇ override ਆਪਸ ਵਿੱਚ ਕਿਵੇਂ ਕੰਮ ਕਰਨ; ਕੁਨੈਕਸ਼ਨ ਦੀ ਮੁੜ ਵਰਤੋਂ ਅਤੇ routing ਨੀਤੀ ਵੱਖਰੀਆਂ ਚੋਣਾਂ ਹਨ।