Recolla as liñas de cabeceira por separado do corpo da resposta. Unha transferencia a través dun proxy pode entregar cabeceiras de CONNECT, autenticación, redirección e resposta de destino nunha soa operación:

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

Esta devolución de chamada conserva a secuencia bruta de liñas e devolve o número de bytes aceptados. Recibe liñas completas; pero aínda non as agrupa en respostas nin selecciona as cabeceiras do sitio web final.

Interprete a secuencia como bloques

Unha liña de estado HTTP inicia un bloque de resposta, e unha liña en branco remata as súas cabeceiras. Preserve eses límites antes de escoller a resposta de destino final. Os intentos de autenticación intermedios e as redireccións poden engadir bloques cada un.

Os trailers poden chegar máis tarde a través da devolución de chamada. Manteña suficiente estado do analizador para distinguilos das cabeceiras iniciais, en lugar de adxuntar cada campo posterior á primeira resposta.

Conserve ou suprima a evidencia do túnel

Lea CURLINFO_HTTP_CONNECTCODE por separado para o estado CONNECT do túnel HTTPS. Un túnel aceptado non establece unha resposta correcta do sitio web.

Se o colector non necesita as cabeceiras CONNECT, CURLOPT_SUPPRESS_CONNECT_HEADERS controla a súa entrega á saída de cabeceiras configurada e ás rutas de devolución de chamada. Comprobe a compatibilidade na libcurl e na compilación de PHP vinculadas. Suprimir simplifica a recollida, pero elimina a evidencia de túnel a nivel de cabeceira que pode axudar ao diagnóstico.

Non recupere o corpo cun desprazamento fixo nin buscando unha etiqueta HTML. Os tamaños das cabeceiras varían, as respostas intermedias difiren e o corpo pode ser binario ou estar baleiro. Un informe de erro antigo específico dunha versión non xustifica un desprazamento suposto.

Manteña o tratamento do corpo por separado e conserve o erro de transferencia xunto coas etapas de resposta observadas se a recollida ou a análise fallan. Iso distingue unha devolución de chamada interrompida, datos de aplicación mal formados e un intercambio de proxy rexeitado.

Artigos relacionados