HTTP und Seiten-Lade-Funktion, chunked
bearbeitet vonHallo und guten Morgen,
> > ich habe mir da eine Requestfunktion zusammengebastelt, die leider nicht bei allen Seiten funktioniert. Es gibt welche, da kommen nur die Header und kein Content.
> >
> > Bei http://forum.selfhtml.org steht über dem Content "1c82" und darunter eine "0".
Ok, so weit bin ich inzwischen: die Zahlen stehen für die Chunks.
Wie muss ich die in die Funktion einbauen?
Also wenn der Header ***"transfer-encoding: chunked"*** vorhanden ist, muss das berücksichtigt werden.
Leider habe ich immer noch keine Idee, wieso einige Seiten überhaupt keinen Content-Body liefern.
> >
> > ~~~php
> > <?php ### get_page.php
> >
> > #==================================================================================================
> > function get_page($url, $format=0)
> > {
> > $url = parse_url($url);
> > $host = isset($url['host']) ? $url['host'] : '';
> > $port = isset($url['port']) ? $url['port'] : 80;
> > $path = (isset($url['path']) ? $url['path'] : '/') . (isset($url['query']) ? '?' . $url['query'] : '');
> >
> > $fp = fsockopen($host, $port, $errno, $errstr, 3);
> > if ($fp)
> > {
> > $hdr = "GET $path HTTP/1.1\r\n";
> > $hdr .= "Host: $host \r\n";
> > # $hdr .= "Cookie: PHPSESSID=9d97b2ff179ed2e6897a197a2c6a0785";
> > $hdr .= "Connection: Keep-Alive\r\n\r\n";
> > fwrite($fp, $hdr);
> >
> > $headerflag = true;
> > $body = '';
> > $_headers = array();
> >
> > while (!feof($fp) && (false !== ($line = fgets($fp, 1024))))
> > {
> > if ($headerflag)
> > {
> > if ($line == "\r\n")
> > {
> > $headerflag = false;
> > continue;
> > }
> >
> > $line = trim($line);
> > $_headerline = explode(': ', $line, 2);
> >
> > if ($format)
> > {
> > if (isset($_headerline[1]))
> > {
> > $_headers[$_headerline[0]] = $_headerline[1];
> > }
> > elseif (strpos(strtoupper($_headerline[0]), 'HTTP') === 0 )
> > {
> > $_http = explode(' ', $_headerline[0]);
> > $_headers['version'] = $_http[0];
> > $_headers['status'] = (isset($_http[1])?$_http[1]:'900');
> > $_headers['message'] = (isset($_http[2])?$_http[2]:'');
> > }
> > else
> > {
> > $_headers[] = $_headerline[0];
> > }
> > }
> > else
> > {
> > $_headers[] = $line;
> > }
> > }
> > else
> > {
> > $body .= $line;
> > }
> > }
> >
> > fclose($fp);
> > return array('headers' => $_headers, 'body' => $body);
> > }
> >
> > return false;
> > }
> >
> > #==================================================================================================
> >
> > $_page = get_page('http://forum.selfhtml.org', 1);
> >
> > echo "<pre>\r\n";
> > echo htmlspecialchars(print_r($_page['headers'], 1)) . "\r\n";
> > echo "<hr>\r\n";
> > echo htmlspecialchars($_page['body']);
> > echo "</pre>\r\n";
> >
> > ?>
> >
> > ~~~
> >
>
> mit dem Simpelscript bekomme ich bei den Requests allerdings Antwort:
>
> ~~~php
> <?php
>
> echo file_get_contents('http://example.org');
>
> ?>
> ~~~
>
> Was macht denn file_get_contents da anders?
>
>
>
> Grüße
> TS
Grüße
TS