Recolliu les línies de capçalera per separat del cos de la resposta. Una transferència a través d'un proxy pot lliurar capçaleres de CONNECT, autenticació, redirecció i resposta de destinació en una sola operació:

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

Aquest callback conserva la seqüència crua de línies i retorna el nombre de bytes acceptats. Rep línies completes; però encara no les agrupa en respostes ni selecciona les capçaleres del lloc web final.

Interpreteu la seqüència com a blocs

Una línia d'estat HTTP inicia un bloc de resposta, i una línia en blanc n'acaba les capçaleres. Preserveu aquests límits abans de triar la resposta de destinació final. Els intents d'autenticació intermedis i les redireccions poden afegir blocs cadascun.

Els trailers poden arribar més tard a través del callback. Mantingueu prou estat del parser per distingir-los de les capçaleres inicials, en lloc d'adjuntar cada camp posterior a la primera resposta.

Conserveu o suprimiu l'evidència del túnel

Llegiu CURLINFO_HTTP_CONNECTCODE per separat per a l'estat CONNECT del túnel HTTPS. Un túnel acceptat no estableix una resposta correcta del lloc web.

Si les capçaleres CONNECT no són necessàries per al recol·lector, CURLOPT_SUPPRESS_CONNECT_HEADERS controla el seu lliurament a la sortida de capçaleres configurada i als camins de callback. Comproveu el suport a les libcurl i a la compilació de PHP enllaçades. Suprimir-les simplifica la recollida, però elimina l'evidència de túnel a nivell de capçalera que pot ajudar al diagnòstic.

No recupereu el cos amb un desplaçament fix ni cercant una etiqueta HTML. Les mides de les capçaleres varien, les respostes intermèdies difereixen i el cos pot ser binari o buit. Un informe d'error antic específic d'una versió no justifica un desplaçament suposat.

Manteniu el tractament del cos separat i conserveu l'error de transferència amb les etapes de resposta observades si la recollida o l'anàlisi fallen. Això distingeix un callback interromput, dades d'aplicació mal formades i un intercanvi de proxy rebutjat.

Articles relacionats