هنگام بررسی مسیر انتخاب‌شده، از Request متصل به پاسخ تکمیل‌شده استفاده کنید. سه مشاهده را جدا نگه دارید:

فیلدمعنا
response.request.meta.get('proxy')نشانی پراکسی انتخاب‌شده این درخواست، در صورت وجود
response.ip_addressنشانی‌ای که ارائه‌دهنده دانلود می‌دهد، ممکن است None باشد
گزارش منبع از مقصدی مورد اعتمادمنبع عمومی که آنجا مشاهده شده است

درون callback، بخش‌های URL دارای اعتبارنامه را از تشخیص‌های روتین کنار بگذارید:

from urllib.parse import urlsplit

proxy = response.request.meta.get('proxy')
proxy_host = urlsplit(proxy).hostname if proxy else None
self.logger.info(
    'target_host=%s proxy_host=%s peer_ip=%s',
    urlsplit(response.url).hostname, proxy_host, response.ip_address,
)

در ارائه‌دهنده HTTP/1.1 در Scrapy 2.13.3 نشانی از همتای اتصال پاسخ می‌آید، نه از سرویس IP خروج. برخی مسیرها، از جمله پاسخ‌های با طول صفر، می‌توانند آن را None بگذارند. ارائه‌دهنده‌های دیگر می‌توانند آن را به گونه‌ای دیگر پر کنند. None به‌خودی‌خود مسیریابی مستقیم را اثبات نمی‌کند.

برای بررسی خروج، از یک نقطه پایانی مورد اعتماد تحت سیاست پراکسی مورد نظر پرس‌وجو کنید و هویت درخواست را همراه با مشاهده نگه دارید. میان‌افزار چرخشی ممکن است به بررسی بعدی نقطه پایانی دیگری بدهد.

تغییر مسیرها نیز درخواست دیگری می‌سازند. فراداده نهایی آن مرحله را توصیف می‌کند؛ تاریخچه تغییر مسیر و هر انتخاب دوباره میان‌افزار را بررسی کنید، نه اینکه آن را دلیل مسیر URL نخست بدانید.

مقالات مرتبط