TS: HTTP und Seiten-Lade-Funktion, Nachtrag

Beitrag lesen

Hallo und guten Morgen,

Hallo 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".

Leider finde ich den Fehler nicht, bzw. verstehe die Logik nicht, nach der bei manchen Requests eben nur die Header kommen.

<?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

echo  file_get_contents('http://example.org');

?>

Was macht denn file_get_contents da anders?

Grüße
TS

0 49

HTTP und Seiten-Lade-Funktion

TS
  • https
  • php
  1. 0

    HTTP und Seiten-Lade-Funktion, Nachtrag

    TS
    1. 0

      HTTP und Seiten-Lade-Funktion, chunked

      TS
      1. 0
        dedlfix
        1. 0
          TS
          1. 0
            dedlfix
            1. 0
              TS
            2. 0
              Jörg Reinholz
          2. 0
            Der Martin
            • https
            1. 0
              Jörg Reinholz
              1. 0
                TS
                • https
                • php
                • webserver
                1. 0
                  Jörg Reinholz
          3. 0
            woodfighter
            1. 0
              TS
              1. 0
                Jörg Reinholz
                1. 0
                  TS
                  1. 0
                    Der Martin
                    1. 0

                      HTTP und Seiten-Lade-Funktion, Unterschiede?

                      TS
                  2. 0
                    Jörg Reinholz
                    1. 0

                      HTTP und Seiten-Lade-Funktion, Blinker

                      TS
  2. 0
    Jörg Reinholz
    1. 0
      TS
      1. 0
        Jörg Reinholz
        1. 0
          TS
          1. 0
            Jörg Reinholz
  3. 0

    Billige Teillösung - typisch PHP

    TS
    1. 0
      dedlfix
      1. 0
        Tabellenkalk
        • meinung
        1. 0
          Der Martin
          1. 0

            [LÖSUNG], wie immer ein PHP-Bug/Unsinnigkeit

            TS
            • php
            • zur info
            1. 0
              Jörg Reinholz
              1. 0
                TS
                1. 0
                  Jörg Reinholz
                  1. 0
                    TS
                    1. 0
                      Jörg Reinholz
            2. 0
              dedlfix
        2. 0
          TS
          1. 0
            TS
            1. 0
              Jörg Reinholz
              1. 0
                TS
                • php
                • zur info
                1. 0
                  Jörg Reinholz
                  1. 0
                    TS
                    1. 0
                      Jörg Reinholz
                      1. 0

                        Encoding, htmlspecialchars()

                        TS
                        1. 0
                          Jörg Reinholz
                          1. 0
                            Tabellenkalk
                            • zur info
                            1. 0
                              Tabellenkalk
  4. 0

    Bei welchen HTTP Status Codes muss Body gelesen werden?

    TS
    1. 0
      dedlfix