Una GET con proxy può raggiungere un server e poi seguire i reindirizzamenti finché il fallimento finale non nasconde la prima risposta. Esponi quella risposta iniziale per la diagnosi:

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

Programma questa richiesta tramite il flusso di avvio o callback esistente del ragno. Per una verifica consentita di una pagina pubblica, la lista di proxy HTTP fornisce candidati per l'URL del proxy della richiesta. inspect_redirect dovrebbe registrare lo stato della risposta e l'intestazione Location invece di seguirla di nuovo ciecamente.

dont_redirect interrompe il reindirizzamento automatico per questa richiesta. handle_httpstatus_list lascia che gli stati indicati raggiungano il callback invece di essere rifiutati dal filtro degli errori HTTP. Le impostazioni riguardano responsabilità diverse del middleware.

Verifica cosa seleziona il reindirizzamento: un URL canonico previsto, uno schema o un nome host diverso, una pagina di accesso o un ciclo ripetuto. Un 302 ricevuto dopo un trasporto riuscito è un'osservazione diversa dal non riuscire ad aprire la connessione proxy.

Quando la normale gestione dei reindirizzamenti viene ripristinata, Scrapy espone redirect_urls e redirect_reasons nei metadati della richiesta della risposta. Questi possono conservare il percorso verso un risultato finale senza lasciare i reindirizzamenti disattivati per l'intera scansione.

Una risposta finale non è automaticamente la pagina che l'applicazione intendeva. Conserva la destinazione e il contenuto della risposta insieme alla diagnosi di instradamento.

Articoli correlati