Aby sprawdzić wybraną trasę, użyj Request powiązanego z zakończoną odpowiedzią. Trzymaj trzy obserwacje osobno:

PoleZnaczenie
response.request.meta.get('proxy')Wybrany URL proxy tego żądania, jeśli istnieje
response.ip_addressAdres dostarczony przez handler pobierania, może być None
Raport źródła z zaufanego celuPubliczne źródło zaobserwowane tam

Wewnątrz callbacku pomiń części URL z danymi logowania w rutynowej diagnostyce:

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

W handlerze HTTP/1.1 w Scrapy 2.13.3 adres pochodzi od peera połączenia odpowiedzi, a nie z usługi wychodzącego IP. Niektóre ścieżki, w tym odpowiedzi o zerowej długości, mogą zostawić go jako None. Inne handlery mogą wypełniać go inaczej. None samo w sobie nie dowodzi bezpośredniego routingu.

Aby sprawdzić wyjście, zapytaj zaufany punkt końcowy zgodnie z zamierzoną polityką proxy i zachowaj tożsamość żądania wraz z obserwacją. Rotujące middleware może dać późniejszej kontroli inny punkt końcowy.

Przekierowania tworzą też kolejne żądanie. Końcowe metadane opisują ten etap; przejrzyj historię przekierowań i ewentualny ponowny wybór przez middleware, zamiast traktować to jako dowód trasy pierwszego URL.

Powiązane artykuły