eddi: gzip/deflate aus einem Socket dekomprimieren

Beitrag lesen

Re:

Und du hast verifiziert, dass du auch wirklich komprimierte Daten bekommen hast?

ja.

Wie?

Durch Testausgabe des Contents vor der Komprimierung.

Bisschen schwache Prüfung, würde ich sagen ...

na na na!

Du _wünschst_ dir deflate oder gzip.
Und wenn es nicht deflate ist, _muss_ es also gzip sein ...?

Ich sehe gerade, Du hast recht, aber das ist nicht das Problem. Stell Dir vor, es sehe so aus:

function getHTTP($l){  
        # sendet einen HTTP-Request  
        $flag=true;  
        $s=@stream_socket_client(((substr($l[0],-1)=='p') ? 'tcp://' : 'ssl://').$l[1].':'.$l[2],$er,$es,10);  
        if(is_resource($s)){  
                if($l[1]==$this->host)  
                        fwrite($s,'GET '.$l[3]." HTTP/1.1\r\n");  
                else{  
                        fwrite($s,'HEAD '.$l[3]." HTTP/1.1\r\n");  
                        $flag=false;  
                }  
  
                fwrite($s,'Host: '.$l[1]."\r\n");  
                fwrite($s,"Accept: */*;q=0.9\r\n");  
                fwrite($s,"Accept-Encoding: gzip,deflate;q=0.9\r\n");  
                fwrite($s,"keep-Alive: 60\r\n");  
                fwrite($s,"Connection: keep-alive\r\n\r\n");  
  
                $size=false;  
                $cont=false;  
  
                if(substr(fgets($s),9,3)==200){  
                        do{     $t=explode(":",fgets($s,21000),2);  
                                if(strtolower($t[0])=='content-encoding')       $cont=trim($t[1]);  
                                elseif(strtolower($t[0])=='content-length')     $size=trim($t[1]);  
                        }while($t[0]!="\r\n");  
  
                        if($flag){  
                                $t='';  
                                while(!feof($s)){  
                                        $t.=fread($s,$size ? $size : 4096);  
                                        if(strlen($t)>1048575){  
                                                $this->error='Resource über 1 MB groß';  
                                                break;  
                                        }  
                                }  
                                if($cont)  
                                        if(stristr($cont,'deflate')!==false)    $t=gzinflate($t);  
                                        elseif(stristr($cont,'gzip')!==false)   $t=gzuncompress($t);  
                        }  
                        $this->content=$t;  
                }  
                else    $this->error='Resource nicht da';  
        }  
        else    $this->error='keine Verbindung';  
}

Gruß aus Berlin!
eddi