Colectați liniile de antet separat de corpul răspunsului. Un transfer printr-un proxy poate livra antetele CONNECT, de autentificare, de redirecționare și ale răspunsului destinației într-o singură operațiune:

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

Acest callback păstrează secvența brută a liniilor și returnează numărul de octeți acceptați. Primește linii complete; dar încă nu le grupează în răspunsuri și nu selectează antetele site-ului final.

Interpretați secvența ca blocuri

O linie de stare HTTP începe un bloc de răspuns, iar o linie goală îi încheie antetele. Păstrați aceste limite înainte de a alege răspunsul final al destinației. Încercările intermediare de autentificare și redirecționările pot fiecare adăuga blocuri.

Trailerele pot sosi mai târziu prin callback. Păstrați suficientă stare a parserului pentru a le distinge de antetele inițiale, în loc să atașați fiecare câmp ulterior primului răspuns.

Păstrați sau suprimați dovada tunelului

Citiți CURLINFO_HTTP_CONNECTCODE separat pentru starea CONNECT a tunelului HTTPS. Un tunel acceptat nu dovedește un răspuns reușit al site-ului.

Dacă antetele CONNECT nu sunt necesare colectorului, CURLOPT_SUPPRESS_CONNECT_HEADERS controlează livrarea lor către ieșirea de antete configurată și căile de callback. Verificați suportul în libcurl și build-ul PHP asociate. Suprimarea simplifică colectarea, dar elimină dovada tunelului la nivel de antet care poate ajuta diagnosticul.

Nu recuperați corpul cu un offset fix sau căutând un tag HTML. Dimensiunile antetelor variază, răspunsurile intermediare diferă, iar corpul poate fi binar sau gol. Un raport vechi de eroare specific unei versiuni nu justifică un offset presupus.

Păstrați tratarea corpului separată și conservați eroarea de transfer împreună cu etapele de răspuns observate dacă colectarea sau analiza eșuează. Astfel se distinge un callback întrerupt, date de aplicație deformate și un schimb proxy respins.

Articole similare