Harald Gabler: Ausgabe einer HTML-Seite

Hallo!

Ich möchte eine bestehende HTML-Seite mit einem Pearl-Script ausgeben. Leider bekomme ich es nicht richtig hin.

$confirmreal = "http://www.domain.de/seite.htm";
print "Location: $confirmreal\n\n";

Im Browser sieht man dann nur die Zeile
Location: http://www.domain.de/seite.htm

Kann mir jemand verraten wie es richtig funktioniert?

Vielen Dank
Harald

  1. Hallo Harald

    $confirmreal = "http://www.domain.de/seite.htm";
    print "Location: $confirmreal\n\n";
    Im Browser sieht man dann nur die Zeile
    Location: http://www.domain.de/seite.htm
    Kann mir jemand verraten wie es richtig funktioniert?

    Zuerst solltest du ausgeben:

    print "content-type: text/html\n\n";

    viele Gruesse
      Stefan Muenz

    1. Hallo Harald

      $confirmreal = "http://www.domain.de/seite.htm";
      print "Location: $confirmreal\n\n";
      Im Browser sieht man dann nur die Zeile
      Location: http://www.domain.de/seite.htm
      Kann mir jemand verraten wie es richtig funktioniert?

      Zuerst solltest du ausgeben:

      print "content-type: text/html\n\n";

      viele Gruesse
        Stefan Muenz

      Moin,

      ich bin mir jetzt nicht ganz sicher, aber wenn Du mit print location arbeiten möchtest, sollte die Datei auch lokal auf dem Server liegen und die Zeile

      print "content-type: text/html\n\n";

      sollte in diesem Falle eben NICHT notiert werden.

      Soll das Dokument über HTTP "kommen", dann schau mal in die PERL-DOKU, was die Module HTTP und LWP so bieten.

      http://www.activestate.com/activeperl/docs/

      RadlerWadeln grüßen ;-) Rolf

      1. Hallo Rolf

        ich bin mir jetzt nicht ganz sicher, aber wenn Du mit print location arbeiten möchtest, sollte die Datei auch lokal auf dem Server liegen und die Zeile
        print "content-type: text/html\n\n";
        sollte in diesem Falle eben NICHT notiert werden.

        Kann auch sein - diese Location-Geschichte finde ich in der Perl-Doku nirgends beschrieben. Aus einem Beispiel, das hier in der Vergangenheit gepostet wurde, hatte ich die Sache mit dem voranstehenden HTTP-Header-Befehl. Waere aber nicht schlecht, wenn das Thema mal endgueltig aufgeklaert wuerde!

        viele Gruesse
          Stefan Muenz

        1. Hallo Rolf

          ich bin mir jetzt nicht ganz sicher, aber wenn Du mit print location arbeiten möchtest, sollte die Datei auch lokal auf dem Server liegen und die Zeile
          print "content-type: text/html\n\n";
          sollte in diesem Falle eben NICHT notiert werden.

          Kann auch sein - diese Location-Geschichte finde ich in der Perl-Doku nirgends beschrieben. Aus einem Beispiel, das hier in der Vergangenheit gepostet wurde, hatte ich die Sache mit dem voranstehenden HTTP-Header-Befehl. Waere aber nicht schlecht, wenn das Thema mal endgueltig aufgeklaert wuerde!

          viele Gruesse
            Stefan Muenz

          Hallo,

          sehr diplomatisch Deine Antwort Stefan...

          hier stehts:<luja>

          http://www.jmarshall.com/easy/cgi/cgi_footnotes.html#samples

          </luja>

          Regnerische Grüße aus EF, Rolf

          1. Hallo Rolf

            http://www.jmarshall.com/easy/cgi/cgi_footnotes.html#samples

            Prima! das ist doch was!

            viele diplomatische Gruesse ;-)
              Stefan Muenz

    2. Hallo Stefan!

      Zuerst solltest du ausgeben:

      print "content-type: text/html\n\n";

      Obwohl es anscheinend nicht notwendig ist, habe ich es mit print "content-type: text/html\n\n"; probiert. Auch das wird nur als Text ausgegeben. Seltsam?!

      content-type: text/html Location: http://www.domain.de/seite.htm

      Konkret geht es um das Gaestebuch von Selena Sol. Dort wird die Bestaetigungsseite dynamisch generiert. Ich wollte aber eine bestehende Seite ausgeben.

      Also vielen Dank an dich und Rolf.

      Harald

      1. Hi,

        print "content-type: text/html\n\n";

        Obwohl es anscheinend nicht notwendig ist, habe ich es mit print "content-type: text/html\n\n"; probiert. Auch das wird nur als Text ausgegeben. Seltsam?!

        content-type: text/html Location: http://www.domain.de/seite.htm

        Konkret geht es um das Gaestebuch von Selena Sol. Dort wird die Bestaetigungsseite dynamisch generiert. Ich wollte aber eine bestehende Seite ausgeben.

        in dem Script wird offenbar schon vorher ein Content-type ausgegeben. Suche und entferne ihn!

        Cheatah

  2. Hallo!

    $confirmreal = "http://www.domain.de/seite.htm";
    print "Location: $confirmreal\n\n";

    Im Browser sieht man dann nur die Zeile
    Location: http://www.domain.de/seite.htm

    Eigentlich sollte das so funktionieren, jedenfalls tut es das bei mir schon seit über 'nem Jahr...
    Hast du vielleicht irgendetwas vor dem "print ..." stehen, z.B. irgendeinen Funktionsaufruf, der "Content-type: text/html\n\n" ausgibt?
    Denn sonst würde schlimmstenfalls ein 501 (Server error) kommen, weil dem Server der http-Header fehlen würde.

    Ciao,
    Mirko

    1. Hallo Mirko!

      Hast du vielleicht irgendetwas vor dem "print ..." stehen, z.B. irgendeinen Funktionsaufruf, der "Content-type: text/html\n\n" ausgibt?

      Super, genau das ist es. Bei dem Script handelt es sich um das Gaestebuch von Selena Sol und dort steht gleich zu Beginn print "Content-type: text/html\n\n"; um die Fehlermeldungen des Scripts anzuzeigen. Nachdem ich die Zeile auskommentiert hatte, wurde die Seite sofort angezeigt.

      Jetzt stellt sich mir aber die Frage, welche Content-types muss ich angeben, damit die Fehlermeldung und die HTML-Datei angezeigt werden? Vielleicht kannst du mir noch einen Hinweis geben.

      Viele Gruesse
      Harald

      1. Hallo Harald

        Hast du vielleicht irgendetwas vor dem "print ..." stehen, z.B. irgendeinen Funktionsaufruf, der "Content-type: text/html\n\n" ausgibt?

        Super, genau das ist es. Bei dem Script handelt es sich um das Gaestebuch von Selena Sol und dort steht gleich zu Beginn print "Content-type: text/html\n\n"; um die Fehlermeldungen des Scripts anzuzeigen. Nachdem ich die Zeile auskommentiert hatte, wurde die Seite sofort angezeigt.

        Jetzt stellt sich mir aber die Frage, welche Content-types muss ich angeben, damit die Fehlermeldung und die HTML-Datei angezeigt werden? Vielleicht kannst du mir noch einen Hinweis geben.

        Tja, die HTTP-Header!
        Wenn Du "Inhalt" ausgeben möchtest, also z.B. die Fehlermeldungen, muß dieser erst entsprechend durch den HTTP-Header deklariert werden. Das geschieht dann mit
        print "Content-type: text/html\n\n";
        \n\n schließt dabei den Header ab. Alles was nun folgt ist Inhalt.

        Wenn Du per location den Browser anweisen möchtest, eine andere Seite anzuzeigen, so muß dies im Header passieren, also _bevor_ dieser mit \n\n abgeschlossen wurde ...

        Eigentlich gibt es da keine allgemeine Variante für beide Fälle. Du mußt also selbst zwischen beiden unterscheiden.

        Als einzige Möglichkeit fällt mir ein, daß Du den Header am Anfang des Programmes _nicht_ abschließt (d.h. mit print "Content-type: text/html\n";) im Gegenzug aber _jede_ mögliche Fehlermeldung mit einem oder zwei \n beginnst ...

        Jörk

        1. Hallo,

          Jetzt stellt sich mir aber die Frage, welche Content-types muss ich angeben, damit die Fehlermeldung und die HTML-Datei angezeigt werden? Vielleicht kannst du mir noch einen Hinweis geben.
          ....
          Eigentlich gibt es da keine allgemeine Variante für beide Fälle. Du mußt also selbst zwischen beiden unterscheiden.

          So isses.
          Wenn ein "Location:" im Header auftaucht, wird eben an diese Seite weitergeleitet, was danach kommt, ist dann egal... du kannst dadurch auch nur *ein* "Location:" verwenden (keine Ahnung was die Browser machen, wenn mehrere kommen. Je nach Programmierung wird vermutlich die erste oder letzte URL genommen...).

          Für deinen Fall würde ich die Datei einfach mit
          open(FEHLER,"<fehler.html");
          print <FEHLER>;
          close(FEHLER);
          im Script ausgeben.

          Als einzige Möglichkeit fällt mir ein, daß Du den Header am Anfang des Programmes _nicht_ abschließt (d.h. mit print "Content-type: text/html\n";) im Gegenzug aber _jede_ mögliche Fehlermeldung mit einem oder zwei \n beginnst ...

          Mal abgesehen davon, daß Content-type: und Location: eigentlich nicht zusammen auftreten sollten, ist das meiner Meinung nach doch etwas umständlich...

          Ciao,
          Mirko