Verwenden Sie die Request, die an der abgeschlossenen Response hängt, wenn Sie deren gewählte Route untersuchen. Halten Sie drei Beobachtungen getrennt:

FeldBedeutung
response.request.meta.get('proxy')Die gewählte Proxy-URL dieser Anfrage, sofern vorhanden
response.ip_addressVom Download-Handler gelieferte Adresse, möglicherweise None
Quellbericht eines vertrauenswürdigen ZielsDie dort beobachtete öffentliche Quelle

Lassen Sie innerhalb eines Callbacks URL-Teile mit Zugangsdaten aus der Routine-Diagnose weg:

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,
)

Im HTTP/1.1-Handler von Scrapy 2.13.3 stammt die Adresse vom Verbindungs-Peer der Response, nicht von einem Exit-IP-Dienst. Manche Pfade, etwa Antworten mit Länge null, können sie auf None lassen. Andere Handler können sie anders befüllen. None beweist für sich genommen kein direktes Routing.

Für eine Exit-Prüfung fragen Sie einen vertrauenswürdigen Endpunkt unter der beabsichtigten Proxy-Richtlinie ab und bewahren Sie die Request-Identität zusammen mit der Beobachtung auf. Rotierende Middleware kann einer späteren Prüfung einen anderen Endpunkt geben.

Auch Weiterleitungen erzeugen eine weitere Anfrage. Die finalen Metadaten beschreiben diese Stufe; prüfen Sie die Weiterleitungshistorie und jede erneute Auswahl durch Middleware, statt sie als Beweis für die Route der ersten URL zu nehmen.

Ähnliche Artikel