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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.