Susanne: "403 Forbidden" bei fsockopen() + fputs(GET / HTTP/1.0)

Beitrag lesen

Hi E7,

vielleicht hätte ich das besser erklären sollen, aber die ich dachte es sei klar, dass die PHP-Erweiterung "Socketfunktionen" nicht zu den Grundfunktionen von PHP zählen, zu denen auch fsockopen() gehört. Die "Socketfunktionen" sind eine Erweiterung von PHP, die beim Compilieren integriert werden kann und mit der man mehr Möglichkeiten in Verbindung mit Sockets hat.

Was ich vorhabe hatte ich eigentlich erklärt:
Es geht um die Überprüfung der Erreichbarkeit bzw. Existenz von URLs per TCP-Verbindung und HTTP-Request.

Die einfachste Möglichkeit ist die Funktion fopen($url, "r");

Wenn man sich aber hinter einer Firewall (Proxyserver) befindet, muss man sich zunächst mit diesem verbinden und über ihn den HTTP-Request absenden. Vorgehensweise:

$fp = fsockopen("tcp://".$proxyhost, $proxyport, &$errno, &$errstr, 30);
   if ($fp)
   {
      fputs($fp, "GET ".$url." HTTP/1.0\n\n");
      while (!feof($fp))
      {
         $reply = fgets($fp, $length_in_byte);
      }
   fclose($fp);
   }

Genau dieses fputs($fp, "GET ".$url." HTTP/1.0\n\n") macht aber bei einigen wenigen Server Probleme, da diese den Request scheinbar als PUT und nicht als GET Request ansehen und darauf mit 403 Forbidden reagieren.

Darauf gekommen bin ich nach 2 Tagen verzweifelter Sucherei und Testerei, indem ich mir mal die Befehlsfolge eines Browsers angesehen habe. Hierzu gibt es eine gute Seite, auf der man beliebige HTTP-Befehle auswählen und an irgendeinen Server senden kann. Danach wird angezeigt, was der Server antwortet. Die URL dieser Seite (falls es mal jemand braucht): http://www.bolege.de/whoiam/

Nun kenne ich zwar den Grund meines Problems, aber leider keine Lösung. Die einzige Möglichkeit, mit PHP direkt HTTP-Requests abzusetzten scheint über diese PHP-Erweitung "Socketfunktionen" möglich zu sein und genau diese kann ich nicht benutzen.

Kann mit irgendjemand einen Tipp geben oder geht hier wirklich gar nichts???

Grüße
Sue