Zbierajte riadky hlavičiek oddelene od tela odpovede. Prenos cez proxy môže doručiť hlavičky CONNECT, autentifikácie, presmerovania a odpovede cieľa v jednej operácii:

$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
    function ($handle, $line) use (&$headerLines) {
        $headerLines[] = $line;
        return strlen($line);
    }
);

Toto spätné volanie zachováva surovú postupnosť riadkov a vracia počet prijatých bajtov. Prijíma úplné riadky; zatiaľ ich však nezoskupuje do odpovedí ani nevyberá hlavičky konečnej webovej stránky.

Interpretujte postupnosť ako bloky

Riadok stavu HTTP začína blok odpovede a prázdny riadok ukončuje jeho hlavičky. Zachovajte tieto hranice pred výberom konečnej odpovede cieľa. Medziľahlé pokusy o autentifikáciu a presmerovania môžu každý pridať bloky.

Trailery môžu neskôr prísť cez spätné volanie. Udržujte dostatok stavu parsera na ich odlíšenie od počiatočných hlavičiek, namiesto pripájania každého neskoršieho poľa k prvej odpovedi.

Zachovajte alebo potlačte dôkaz tunela

Čítajte CURLINFO_HTTP_CONNECTCODE samostatne pre stav CONNECT tunela HTTPS. Prijatý tunel nepreukazuje úspešnú odpoveď webovej stránky.

Ak zberač hlavičky CONNECT nepotrebuje, CURLOPT_SUPPRESS_CONNECT_HEADERS riadi ich doručenie do nakonfigurovaného výstupu hlavičiek a ciest spätného volania. Overte podporu v prepojených libcurl a zostavení PHP. Potlačenie zjednodušuje zber, ale odstraňuje dôkaz tunela na úrovni hlavičiek, ktorý môže pomôcť diagnostike.

Neobnovujte telo pomocou pevného posunu ani hľadaním HTML značky. Veľkosti hlavičiek sa líšia, medziľahlé odpovede sa odlišujú a telo môže byť binárne alebo prázdne. Staré hlásenie chyby špecifické pre verziu neoprávňuje odhadnutý posun.

Udržujte spracovanie tela oddelene a pri zlyhaní zberu alebo analýzy si ponechajte chybu prenosu spolu s pozorovanými fázami odpovede. To rozlíši prerušené spätné volanie, poškodené údaje aplikácie a odmietnutú výmenu cez proxy.

Súvisiace články