Een proxied GET kan een server bereiken en daarna omleidingen volgen totdat de uiteindelijke fout het eerste antwoord verbergt. Maak dat eerste antwoord zichtbaar voor diagnose:

request = scrapy.Request(
    'https://service.example/page',
    callback=inspect_redirect,
    meta={
        'proxy': 'http://proxy.example:8080',
        'dont_redirect': True,
        'handle_httpstatus_list': [301, 302, 303, 307, 308],
    },
)

Plan dit verzoek via de bestaande start- of callbackstroom van de spider. Voor een toegestane controle van een openbare pagina levert de HTTP-proxylijst kandidaten voor de proxy-URL van het verzoek. inspect_redirect moet de responsstatus en de Location-header vastleggen in plaats van die opnieuw blind te volgen.

dont_redirect stopt automatische omleiding voor dit verzoek. handle_httpstatus_list laat de genoemde statussen de callback bereiken in plaats van te worden geweigerd door HTTP-foutfiltering. De instellingen betreffen verschillende middleware-verantwoordelijkheden.

Controleer wat de omleiding selecteert: een bedoelde canonieke URL, een ander schema of een andere hostnaam, een inlogpagina of een zich herhalende cyclus. Een 302 die na een geslaagd transport wordt ontvangen, is een andere waarneming dan het niet kunnen openen van de proxyverbinding.

Wanneer de normale omleidingsafhandeling is hersteld, toont Scrapy redirect_urls en redirect_reasons in de requestmetadata van de respons. Die kunnen het pad naar een eindresultaat bewaren zonder omleidingen voor de hele crawl uitgeschakeld te laten.

Een eindantwoord is niet automatisch de pagina die de applicatie bedoelde. Bewaar de bestemming en de responsinhoud bij de routeringsdiagnose.

Gerelateerde artikelen