Un GET prin proxy poate ajunge la un server și apoi poate urma redirecționări până când eșecul final ascunde primul răspuns. Expune acel răspuns inițial pentru diagnosticare:

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

Programează această cerere prin fluxul existent de start sau callback al păianjenului. Pentru o verificare permisă a unei pagini publice, lista de proxy HTTP oferă candidați pentru URL-ul de proxy al cererii. inspect_redirect ar trebui să înregistreze starea răspunsului și antetul Location în loc să îl urmeze din nou orbește.

dont_redirect oprește redirecționarea automată pentru această cerere. handle_httpstatus_list permite stărilor numite să ajungă la callback în loc să fie respinse de filtrarea erorilor HTTP. Setările privesc responsabilități diferite ale middleware-ului.

Verifică ce selectează redirecționarea: un URL canonic dorit, o altă schemă sau un alt nume de gazdă, o pagină de autentificare sau un ciclu care se repetă. Un 302 primit după un transport reușit este o observație diferită de eșecul de a deschide conexiunea proxy.

Când tratarea normală a redirecționărilor este restabilită, Scrapy expune redirect_urls și redirect_reasons în metadatele cererii răspunsului. Acestea pot păstra calea către un rezultat final fără a lăsa redirecționările dezactivate pe tot parcursul crawl-ului.

Un răspuns final nu este automat pagina pe care aplicația o intenționa. Păstrează destinația și conținutul răspunsului împreună cu diagnosticul de rutare.

Articole similare