Attingendo @Geoffrey eccellente risposta in this thread ...
Alcuni degli altri soluzioni offerte questa discussione sono non fare questo in modo corretto.
- Splitting su
\r\n\r\n
non è affidabile quando CURLOPT_FOLLOWLOCATION
è acceso o quando il server risponde con un codice 100.
- Rilevare la dimensione delle intestazioni tramite
CURLINFO_HEADER_SIZE
non è sempre affidabile, soprattutto quando vengono utilizzati i proxy o in alcuni degli stessi scenari di reindirizzamento.
Il metodo più affidabile per ottenere le intestazioni utilizza CURLOPT_HEADERFUNCTION
. Quindi puoi rimuovere curl_setopt($ch, CURLOPT_HEADER, 1);
e il tuo corpo sarà pulito senza intestazioni.
Ecco un metodo molto pulito per eseguire questo utilizzando chiusure PHP. Converte anche tutte le intestazioni in lettere minuscole per una gestione coerente tra server e versioni HTTP.
$ch = curl_init();
$headers = [];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Run the following function for each header received
// Note: Does NOT handle multiple instances of the same header. Later one will overwrite.
// Consider handling that scenario if you need it.
curl_setopt($ch, CURLOPT_HEADERFUNCTION, function($curl, $header) use (&$headers) {
$len = strlen($header);
$header = explode(':', $header, 2);
if (count($header) >= 2)
$headers[strtolower(trim($header[0]))] = trim($header[1]);
return $len;
});
$data = curl_exec($ch);
print_r($headers);
fonte
2017-06-09 07:11:43
Questo errore quando HTTP/1.1. Esistono 100 intestazioni continue. – sivann
È possibile rimuovere l'intestazione continua con 'curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ('Expect:'));'. –
Anche questo non è valido quando si utilizza CURLOPT_FOLLOWLOCATION e viene recuperato un indirizzo con un reindirizzamento 301 o 302. –