Verzamel headerregels apart van de responsbody. Een overdracht via een proxy kan CONNECT-, authenticatie-, omleidings- en bestemmingsreactieheaders in één bewerking leveren:

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

Deze callback bewaart de ruwe regelvolgorde en retourneert het aantal geaccepteerde bytes. Hij ontvangt volledige regels; maar hij groepeert ze nog niet in reacties en selecteert ook niet de headers van de uiteindelijke website.

Interpreteer de reeks als blokken

Een HTTP-statusregel begint een reactieblok, en een lege regel beëindigt de headers ervan. Behoud die grenzen voordat u de uiteindelijke bestemmingsreactie kiest. Tussenliggende authenticatiepogingen en omleidingen kunnen elk blokken toevoegen.

Trailers kunnen later via de callback binnenkomen. Houd voldoende parserstatus aan om ze van de initiële headers te onderscheiden, in plaats van elk later veld aan de eerste reactie te koppelen.

Bewaar of onderdruk het tunnelbewijs

Lees CURLINFO_HTTP_CONNECTCODE apart voor de CONNECT-status van de HTTPS-tunnel. Een geaccepteerde tunnel bewijst geen geslaagde websiterespons.

Als de verzamelaar de CONNECT-headers niet nodig heeft, regelt CURLOPT_SUPPRESS_CONNECT_HEADERS de levering ervan aan de geconfigureerde headeruitvoer en callbackpaden. Controleer de ondersteuning in de gekoppelde libcurl en PHP-build. Onderdrukking vereenvoudigt het verzamelen, maar verwijdert tunnelbewijs op headerniveau dat bij de diagnose kan helpen.

Herstel de body niet met een vaste offset of door naar een HTML-tag te zoeken. Headergroottes variëren, tussenliggende reacties verschillen en de body kan binair of leeg zijn. Een oud release-specifiek bugrapport rechtvaardigt geen gegokte offset.

Houd de bodyafhandeling gescheiden en bewaar de overdrachtsfout samen met de waargenomen reactiefasen als het verzamelen of parsen mislukt. Dat onderscheidt een afgebroken callback, misvormde applicatiegegevens en een geweigerde proxy-uitwisseling.

Gerelateerde artikelen