dedlfix: Fehlermeldung bei file_get_contents - String auslesen.

Beitrag lesen

Tach!

$ch = curl_init('http://192.168.123.35');

Ich kenne mich mit der curl-Extension nicht aus - aber ist es Absicht, dass bei der URL der abschließende Slash / fehlt? Gewöhnliche Browser ergänzen den stillschweigend, aber macht curl das auch?

Weder Curl noch Browser brauchen nach dem Domainnamen oder IP-Adresse einen / (wenn kein Pfad angegeben ist). Die URL kann nicht 1:1 genommen werden, sondern muss in jedem Fall zerlegt werden, um die verschiedenen Informationen für den eigentlichen Request und den Verbindungsaufbau entnehmen zu können.

  • http muss umgesetzt werden in die zugehörige Portnummer
  • :// muss ignoriert werden (zumindest für HTTP)
  • Ein Domainname müsste in eine IP-Adresse aufgelöst werden und wird außerdem zum Bilden des Host-Headers herangezogen. Ist hier nicht der Fall.
  • Die IP-Adresse wird für den Verbindungsaufbau benötigt und nicht für den eigentlichen Request (sprich, die Nutzlast aus Sicht von TCP)
  • Die erste Zeile des HTTP-Requests sieht in dem Fall so aus: GET / HTTP/1.x
    Ein Weglassen des ersten / ergibt ungültige Syntax. HTTP-Clients müssen in jedem Fall bei nicht vorhandenem Pfad selbständig den / substituieren.

Die Sachlage ist anders, wenn der / Teil eines ansonsten nicht leeren Pfads ist. Da muss klar angegeben werden, ob das Verzeichnis gemeint ist (mit /) oder ein Dokument im Elternverzeichnis (ohne /), sonst gibt es Folgefehler beim Auflösen relativer Links. Meist wird Webserver beim Fehlen des / und wenn ein gleichnamiges Verzeichnis gefunden werden kann, den Client zur Adresse mit angehängtem / weiterleiten. Wenn man sich diesen Redirekt sparen möchte, sollte man solche Adressen gleich mit abschließendem / angeben. Aber wie gesagt, bei leerem Pfad muss der Browser selbständig den / verwenden.

dedlfix.