استفاده از IP پروکسی در Python Requests
مسیرهای پروکسی را برای هر درخواست در Requests صریح تعیین کنید، طرح مناسب نقطهٔ اتصال را برگزینید و پایان مهلت و شکست تونل HTTPS را مدیریت کنید.
وقتی Requests در پروژه در دسترس است، نگاشت پروکسیها را به فراخوانی بدهید:
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 را با پروکسی در حال اجرای خود یا گزینهای از فهرست پروکسیهای HTTP که با این درخواست میآزمایید جایگزین کنید. کلیدها طرح مقصد را بیان میکنند: http برای URLهای HTTP و https برای URLهای HTTPS. مقدارها شنوندهٔ پروکسی را توصیف میکنند. اگر شبکه مسیرهای جداگانه میخواهد، میتوانند نقاط متفاوتی باشند.
مقدار پروکسی http:// زیر کلید https عمدی است. Requests از شنوندهٔ HTTP تونل CONNECT میخواهد و سپس TLS مقصد را از درون آن برقرار میکند، با رعایت سیاست مقصد و درگاه پروکسی. تغییر مقدار به https:// درخواست TLS تا خود پروکسی است؛ اگر شنونده HTTP بدون رمزگذاری بخواهد، ممکن است شکست بخورد.
دو عدد مهلت چه معنایی دارند؟
timeout=(5, 15) مهلت اتصال و خواندن را تعیین میکند. محدودیت پانزدهثانیهای برای کل کار ایجاد نمیکند. دادههای ورودی دورهای، چند نشانی و تلاشهای اتصال میتوانند زمان سپریشده را طولانی کنند. اگر این تنظیم را حذف کنید Requests مهلت عمومی ندارد؛ حدود مناسب پاسخ را انتخاب کنید و اگر کار به سقف زمانی کلی سختگیرانه نیاز دارد، در سطح برنامه مهلت نهایی اضافه کنید.
شکست را در مرحلهٔ وقوعش مدیریت کنید
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 شود. شاخهٔ HTTPError پس از دریافت پاسخی با وضعیت خطا میآید؛ Timeout یعنی حد تنظیمشدهای منقضی شده است. زنجیرهٔ استثناهای برقراری اتصال را محلی بررسی کنید و پیش از اشتراک، نقاط حاوی اطلاعات ورود و URLهای خصوصی را حذف کنید.
اعتبارسنجی گواهی را روشن بگذارید. اگر شبکهٔ مجاز از CA خصوصی یا رهگیری مدیریتشده استفاده میکند، مواد اعتماد مورد انتظار را فراهم کنید، نه اینکه اعتبارسنجی را غیرفعال کنید.
ورودیهای صریح هر درخواست مسیرهای دادهشده در اینجا را کنترل میکنند، ولی طرحهای حذفشده ممکن است همچنان تحت تأثیر کشف پروکسی محیط باشند. هنگام انتقال فراخوانی به Session قابل استفادهٔ مجدد، تصمیم بگیرید متغیرهای محیط، پیشفرضهای Session و بازنویسیهای هر درخواست چگونه تعامل کنند؛ استفادهٔ مجدد از اتصال و سیاست مسیریابی دو انتخاب جدا هستند.