Четене на прокси крайната точка на Scrapy и IP адреса на връзката
Използвайте метаданните на заявката за избрания прокси, третирайте 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.