Skupljajte redove zaglavlja odvojeno od tijela odgovora. Prijenos preko proxyja može dostaviti zaglavlja CONNECT, autentifikacije, preusmjeravanja i odgovora odredišta u jednoj operaciji:

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

Ovaj povratni poziv zadržava sirovi redoslijed redova i vraća broj prihvaćenih bajtova. Prima kompletne redove; ali ih još ne grupiše u odgovore niti bira zaglavlja konačne web stranice.

Tumačite slijed kao blokove

HTTP statusni red započinje blok odgovora, a prazan red završava njegova zaglavlja. Sačuvajte te granice prije nego što odaberete konačni odgovor odredišta. Posrednički pokušaji autentifikacije i preusmjeravanja mogu svaki dodati blokove.

Traileri mogu kasnije stići kroz povratni poziv. Čuvajte dovoljno stanja parsera da ih razlikujete od početnih zaglavlja, umjesto da svako kasnije polje prikačite na prvi odgovor.

Sačuvajte ili potisnite dokaz tunela

Čitajte CURLINFO_HTTP_CONNECTCODE odvojeno za CONNECT status HTTPS tunela. Prihvaćeni tunel ne dokazuje uspješan odgovor web stranice.

Ako CONNECT zaglavlja nisu potrebna sakupljaču, CURLOPT_SUPPRESS_CONNECT_HEADERS kontroliše njihovu dostavu konfigurisanom izlazu zaglavlja i putanjama povratnog poziva. Provjerite podršku u povezanim libcurl i PHP buildovima. Potiskivanje pojednostavljuje sakupljanje, ali uklanja dokaz tunela na razini zaglavlja koji može pomoći dijagnostici.

Ne rekonstruirajte tijelo pomoću fiksnog pomaka ili traženjem HTML oznake. Veličine zaglavlja variraju, posrednički odgovori se razlikuju, a tijelo može biti binarno ili prazno. Stari izvještaj o grešci vezan za izdanje ne opravdava nagađani pomak.

Držite rukovanje tijelom odvojeno i sačuvajte grešku prijenosa uz uočene faze odgovora ako sakupljanje ili parsiranje ne uspije. To razlikuje prekinuti povratni poziv, iskvarene podatke aplikacije i odbijenu proxy razmjenu.

Povezani članci