Samla huvudrader separat från svarets kropp. En överföring via en proxy kan leverera CONNECT-, autentiserings-, omdirigerings- och målsvarsrubriker i en enda operation:

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

Denna callback behåller den rå radordningen och returnerar antalet godtagna byte. Den tar emot fullständiga rader; men den grupperar dem ännu inte i svar och väljer inte heller den slutliga webbplatsens rubriker.

Tolka sekvensen som block

En HTTP-statusrad börjar ett svarsblock, och en tom rad avslutar dess rubriker. Bevara dessa gränser innan du väljer det slutliga målsvaret. Mellanliggande autentiseringsförsök och omdirigeringar kan var och en lägga till block.

Trailers kan anlända senare via callbacken. Behåll tillräckligt med parsertillstånd för att skilja dem från de inledande rubrikerna, i stället för att koppla varje senare fält till det första svaret.

Bevara eller undertryck tunnelbeviset

Läs CURLINFO_HTTP_CONNECTCODE separat för HTTPS-tunnelns CONNECT-status. En accepterad tunnel bevisar inte ett lyckat webbplatssvar.

Om CONNECT-rubrikerna inte behövs för insamlaren styr CURLOPT_SUPPRESS_CONNECT_HEADERS deras leverans till den konfigurerade huvudutdata och callback-vägarna. Kontrollera stödet i den länkade libcurl och PHP-bygget. Undertryckning förenklar insamlingen men tar bort tunnelbevis på huvudnivå som kan hjälpa diagnostiken.

Återställ inte kroppen med en fast förskjutning eller genom att söka efter en HTML-tagg. Huvudstorlekar varierar, mellanliggande svar skiljer sig och kroppen kan vara binär eller tom. En gammal utgivningsspecifik felrapport motiverar inte en gissad förskjutning.

Håll kroppshanteringen åtskild och bevara överföringsfelat tillsammans med de observerade svarfaserna om insamlingen eller tolkningen misslyckas. Det skiljer en avbruten callback, felaktig applikationsdata och ett avvisat proxyutbyte.

Relaterade artiklar