Чтение конечной точки прокси и IP-адреса соединения в Scrapy
Используйте метаданные запроса для выбранного прокси, рассматривайте response.ip_address как сведения о собеседнике от обработчика и проверяйте исходящий IP на целевом узле.
Чтобы изучить выбранный маршрут, используйте Request, привязанный к завершённому ответу. Держите три наблюдения раздельно:
| Поле | Значение |
|---|---|
response.request.meta.get('proxy') | Выбранный URL прокси этого запроса, если он есть |
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 сам по себе не доказывает прямое маршрутизирование.
Для проверки выхода запросите доверенную конечную точку в рамках предполагаемой политики прокси и сохраните идентичность запроса вместе с наблюдением. Ротационный middleware может дать следующей проверке другую конечную точку.
Перенаправления тоже создают ещё один запрос. Итоговые метаданные описывают этот этап; проверяйте историю перенаправлений и любой повторный выбор middleware, а не считайте их доказательством маршрута первого URL.