Andreas: WAP Browser erkennen

Hi!

Ich möchte in meinem Perl Script entscheiden, ob WML oder HTML ausgegeben werden soll. Hierfür müsste ich allerdings herausfinden, ob der Besucher mit einem HTML-Browser oder einem WAP-Browser surft. Gibt es in Perl irgendwie die Möglichkeit das herauszufinden??

Ciao
Andreas

  1. Hallo,

    die einzige Möglichkeit besteht wohl in der Abfrage der User_Agents.
    Das Problem hier ist aber, dass man wohl nie alle WML-Browser kennen wird/kann und so nie 100%ig sicher sein kann, dass es sich um einen WML-Browser handelt.

    Ich kann Dir hier ein paar User_Agents geben, die sind einer Strato-FAQ entnommen. Das Script unten ist ein PHP-Script. Mit mehr kann ich nicht dienen ;)

    <?php
              $htmlredirect = "index.html";
              $wmlredirect = "index.wml";

    if (strpos(strtoupper($HTTP_ACCEPT),"VND.WAP.WML") > 0)
            { // Check whether the browser/gateway says it accepts WML.
            $br = "WML";
            }
        else
            {
            $browser=substr(trim($HTTP_USER_AGENT),0,4);
            if($browser=="Noki" ||  $browser=="Eric" ||$browser=="WapI" || $browser=="MC21" || $browser=="AUR " || $browser=="R380" || $browser=="UP.B" || $browser=="WinW"|| $browser=="UPG1" || $browser=="upsi" || $browser=="QWAP" || $browser=="Jigs" || $browser=="Java" || $browser=="Alca"|| $browser=="MITS" || $browser=="MOT-" || $browser=="My S" || $browser=="WAPJ" || $browser=="fetc" || $browser=="ALAV" || $browser=="Wapa")
                {
                $br = "WML";
                }
            else
                {
                $br = "HTML";
                }
            }
        if($br == "WML")
            {
            header("Location: ".$wmlredirect);
            exit;
            }
        else
            {
            header("Location: ".$htmlredirect);
            exit;
            }
    ?>

    Viel Erfolg...

    Alex :)

    1. Hi Alex,

      vielen Dank für Deine Hilfe!

      Das währe vielleicht noch eine interessante Umgebungsvariable für Perl: Welche Contents kann der Browser?

      Naja, dann werde ich mir wohl etwas Anderes einfallen lassen. Die Liste der WAP Browser immer auf dem neuesten Stand zu halten währe mir auf Dauer zu mühselig...

      Ciao
      Andreas

      1. Hi Andreas,

        Das wäre vielleicht noch eine interessante
        Umgebungsvariable für Perl: Welche Contents
        kann der Browser?

        genau das ist HTTP_ACCEPT ja ...

        Besuche mal
           http://www.schroepl.net/cgi-bin/http_trace.pl
        mit diversen Browsern und schau Dir an, was die mir so alles erzählen.

        Der Apache setzt alle Inhalte von HTTP-Headern des ankommenden Requests mit dem Präfix "HTTP_" ins Environment. HTTP_ACCEPT ist also genau der Inhalt des HTTP-Headers "Accept:".
        Genau darauf verläßt sich mein (ziemlich primitives) Perl-Skript. (intern macht es "LWP::UserAgent")

        Naja, dann werde ich mir wohl etwas Anderes
        einfallen lassen.

        Ich würde es übrigens anders herum versuchen.

        Können denn die WAP-Browser normales HTML? Ich denke, nein.
        Daß ein Web-Browser WML kann (über ein plugin), kann ich mir schon eher vorstellen (es ist einfacher, einen Browser zu "verdummen" als ein Handy schlauer zu machen).

        Ich würde also zuerst prüfen, ob der Client HTML kann, und im anderen Fall dann noch, ob er WML kann.

        Das könnte übrigens ein Fall für HTTP Content Negotiation sein - will sagen: Gar nichts programmieren, sondern einfach nur den Apache richtig konfigurieren ...
        (http://aktuell.de.selfhtml.org/artikel/server/alt-http/)

        Viele Grüße
              Michael