Eine proxied GET-Anfrage kann einen Server erreichen und dann Weiterleitungen folgen, bis der schließliche Fehler die erste Antwort verdeckt. Diese erste Antwort zur Diagnose offenlegen:

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

Diese Anfrage über den bestehenden Start- oder Callback-Fluss der Spinne einplanen. Für eine zulässige Prüfung öffentlicher Seiten liefert die HTTP-Proxy-Liste Kandidaten für die Proxy-URL der Anfrage. inspect_redirect sollte den Antwortstatus und den Location-Header erfassen, statt ihr erneut blind zu folgen.

dont_redirect stoppt die automatische Weiterleitung für diese Anfrage. handle_httpstatus_list lässt die genannten Status den Callback erreichen, statt von der HTTP-Fehlerfilterung abgelehnt zu werden. Die Einstellungen betreffen unterschiedliche Middleware-Aufgaben.

Prüfen, wohin die Weiterleitung führt: eine beabsichtigte kanonische URL, ein anderes Schema oder einen anderen Hostnamen, eine Anmeldeseite oder einen wiederkehrenden Zyklus. Ein 302 nach erfolgreichem Transport ist eine andere Beobachtung als das Scheitern des Proxy-Verbindungsaufbaus.

Wenn die normale Weiterleitungsbehandlung wiederhergestellt ist, legt Scrapy redirect_urls und redirect_reasons in den Request-Metadaten der Antwort offen. Diese können den Weg zum Endergebnis erhalten, ohne Weiterleitungen für den gesamten Crawl deaktiviert zu lassen.

Eine endgültige Antwort ist nicht automatisch die von der Anwendung beabsichtigte Seite. Ziel und Antwortinhalt zusammen mit der Routing-Diagnose festhalten.

Ähnliche Artikel