httpdResponse ???

Startseite Foren Deutsches LiveCode-Forum httpdResponse ???

Schlagwörter: 

Ansicht von 11 Antwort-Themen
  • Autor
    Beiträge
    • #36459
      foto2004
      Teilnehmer

        Hallo Gemeinde,

        ja ich schon wieder, eine Frage hat jemand Erfahrung mit dem

        “httpdResponse”

        ich meine wie kann ich das Dingens dazu bringen mir eine bestimmte Seite (einfache Textdatei) an einem Browser auszugeben.

        Das mit dem httpdStart ist mir einigermaßen klar aber das mit dem httpdResponse eben nicht so ganz.

      • #36461
        Torsten
        Teilnehmer

          httpdstart startet einen kleinen Webserver auf deinem Rechner, der über den Browser angefragt werden kann.
          Wenn der läuft und Du eine URL des Servers aufrufst, dann bestimmt httpdresponse, was passieren soll.

          Im Beispiel vom Dictionary ist es, dass nach der angefragten Datei gesucht wird und diese im Browser gerendert wird (so wie es ein normaler Webserver auch macht).

          Kopiere das folgende Skript in einen Button und drück drauf 🙂

          
          on mouseUp
             httpdStart "NewRequest", 12345, "My Server"
             launch url ("http://localhost:" & it)
          end mouseUp
          
          on NewRequest pSocketID, pRequest
             local tPath
             put the effective filename of this stack into tPath --> Dateiort = Ort des Stacks ist gleich das Homeverzeichnnis (muss aber beim Mac angepasst werden)
             set the itemDelimiter to slash
          
             put "files/" & pRequest["resource"] into the last item of tPath --> hier wird erwartet, dass im Unterverzeichnis "files" die entsprechenden Dateien liegen, die der Server servieren soll :-)
          
             if there is a file tPath then
                local tData
                put url ("binfile:" & tPath) into tData
                httpdResponse pSocketID, 200, tData --> wenn die Datei existiert, wird sie an den Browser übermittelt
             else
                -- not found
                httpdResponse pSocketID, 404
             end if
          end NewRequest

          Happy Scripting
          Torsten

        • #36463
          foto2004
          Teilnehmer

            Danke das war es hatte nur einen Denkfehler mit den “files/” ist bei mir data jetzt geht es.

            Danke noch einmal.

            LG Immanuel

          • #36464
            foto2004
            Teilnehmer

              hmm in der IDE geht es aber sobald ich das zu einer App mache (WIN u MAC) geht es nirgends.

              Eine Idee?

            • #36479
              Klaus Major
              Administrator

                Klingt, als würde die entsprechende LIBRARY nicht gefunden bzw. gar nicht erst der Runtime geladen. Leider ist das “automatische Suchen nach Inclusions” in den “Standalone Application Settings” nicht verlässlich.

                In den “Standalone e Application Settings” klicke mal auf
                -> Select inclusion for the standalone application
                Und wähle dann auf der Karte -> Inclusions die Library -> HTTPD Library

                Das könnte es gewesen sein…

              • #36505
                foto2004
                Teilnehmer

                  das funkt. nur woher soll ich bei einem größeren Projekt wissen was für Inclusions da alle anzukreuzen sind?

                • #36529
                  Torsten
                  Teilnehmer

                    Hi,
                    Klaus hat recht, man muss auf jeden Fall die HHTP library manuell inkludieren, sonst wird das nichts.

                    Das nächste Problem sind die Dateien, die der Server anzeigen soll. Da gibt es zwei Möglichkeiten:

                    1. die Dateien sind immer im selben Pfad auf dem Rechner und Du musst im Skript den absoluten Pfad setzen, in dem Du die die tPath-Variable entsprechend anpasst.

                    2. die Dateien sind in files und sollen mitgenommen werden. Dann musst Du den Ordner über Standalone Setting – Copy files – Copy folder importieren.

                    Habs eben auch mal ausprobiert, funktionert ziemlich gut. Da hat man einen eigenen Webserver zum Mitnehmen 🙂

                    Happy Scripting
                    Torsten

                  • #36543
                    foto2004
                    Teilnehmer

                      Hallo Torsten,

                      ja das mit dem manuellem einbinden hat gefunkt. Habe es nur einmal gemacht und jetzt scheint es so als ob sich das LC gemerkt hat.

                      Das mit den Pfaden hab ich eigentlich eh schon gelöst

                      on pfadSetzen ## Die Pfade setzen
                         if the environment is "mobile" then
                            put specialFolderPath("engine") into programmPfad
                         else
                            put the filename of this stack into programmPfad
                            set the itemDelimiter to "/"
                            delete the last item of programmPfad
                         end if
                         put programmPfad&"/data/" into dataPfad
                      ...
                      

                      Das mit den Dateien anzeigen ist eigentlich (wenn der Groschen gefallen ist) recht einfach.

                      Hier eine Abänderung deines Beispiels:

                      
                      on NewRequest pSocketID, pRequest
                         local tPath
                         put the effective filename of this stack into tPath --> Dateiort = Ort des Stacks ist gleich das Homeverzeichnnis (muss aber beim Mac angepasst werden)
                         set the itemDelimiter to slash
                         if pRequest["resource"] = "/test" then
                            httpdResponse pSocketID, 200, "Jetz geht es"
                         end if 
                         if pRequest["resource"] = "/" then
                            put "data/tagesliste/tagesliste.txt" into the last item of tPath
                         else
                            put "data/tagesliste/" & pRequest["resource"] into the last item of tPath --> hier wird erwartet, dass im Unterverzeichnis "files" die entsprechenden Dateien liegen, die der Server servieren soll :-)
                            
                         end if
                            
                         if there is a file tPath then
                            local tData
                            put url ("binfile:" & tPath) into tData
                            httpdResponse pSocketID, 200, tData --> wenn die Datei existiert, wird sie an den Browser übermittelt
                         else
                            -- not found
                            httpdResponse pSocketID, 404, "Nicht gefunden"
                         end if
                      end NewRequest
                      

                      eventuell kann sich da der eine oder andere auch was rausziehen.

                    • #36544
                      Klaus Major
                      Administrator

                        Wir haben -> specialfolderpath(“resources”)
                        Bitte unbedingt auch benutzen!, die beste Erfindung von LC seit geschnitten Brot! 🙂

                        Alles was wir über “Copy files” in den “Standalone Application Setting” unserer Runtime hinzufügen, finden wir in der Runtime in dem Ordner -> specialfolderpath(“resources”)

                        Und zwar auf JEDER Platform: Mac, Windows, Linux, iOS, Android!

                        Also:

                        ...
                          put specialfolderpath("resources") & "/" into tPath
                        ...
                          if pRequest["resource"] = "/" then
                              --answer "Test.txt"
                              put "data/tagesliste/tagesliste.txt" AFTER tPath
                           else
                              put "data/tagesliste/" & pRequest["resource"] AFTER tPath       
                           end if
                        ...

                        WEITERSAGEN! 🙂

                      • #36546
                        Klaus Major
                        Administrator

                          Ich sehe gerade, es ist nicht das erste Mal, daß ich Dir -> specialfolderpath(“resources”) erkläre.
                          Notier Dir das doch mal! 😎

                        • #36548
                          foto2004
                          Teilnehmer

                            Du meinst statt dem
                            put the effective filename of this stack into tPath

                            ja hast recht ich bitte gnädig um Entschuldigung

                          • #36551
                            Klaus Major
                            Administrator

                              Ich erkläre es auch gerne noch zwanzig Mal, aber man macht sich dann halt so seine Gedanken…

                          Ansicht von 11 Antwort-Themen
                          • Du musst angemeldet sein, um auf dieses Thema antworten zu können.