29 juillet 2009

Séparer les entêtes et le contenu d'une réponse HTTP

De nos jours, il est rare d'avoir à traiter directement un flux HTTP, tant il existe de surcouche d'APIs, de classe, de langage pour masquer ce protocole. Si par hasard, on se retrouve nez à nez avec une chaine HTTP voici une petite fonction qui découpera la réponse HTTP en un tableau contenant les entêtes et une chaine de caractères avec le contenu de la réponse (généralement du HTML)


    function parse_http_response ($string) 
    {

        $headers = array();
        $content = '';
        $str = strtok($string, "\n");
        $h = null;
        while ($str !== false) {
            if ($h and trim($str) === '') {                
                $h = false;
                continue;
            }
            if ($h !== false and false !== strpos($str, ':')) {
                $h = true;
                list($headername, $headervalue) = explode(':', trim($str), 2);
                $headername = strtolower($headername);
                $headervalue = ltrim($headervalue);
                if (isset($headers[$headername])) 
                    $headers[$headername] .= ',' . $headervalue;
                else 
                    $headers[$headername] = $headervalue;
            }
            if ($h === false) {
                $content .= $str."\n";
            }
            $str = strtok("\n");
        }
        return array($headers, trim($content));
    } 

Aucun commentaire:

Publier un commentaire