Announcement

Collapse
No announcement yet.

POST,GET und PUT unklar!!!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • POST,GET und PUT unklar!!!

    Hallo, ich habe vollgendes Problem:

    Ich möchte mit folgendem Befehl eine CounterID auslesen, und dann eine Entsprechende Grafik zurückweisen mittels CGI!!!

    <IMG="http://www.domain.de/cgi-bin/hit.exe/hit?CounterID=a10003">

    Da ich glaube das ich mich verkompliziere, bitte ich um detailierte Hilfestellung für das CGI.

    Dankend im Voraus Stefan

  • #2
    Hallo,

    die allesentscheidende Frage lautet, ob die Web-Komponenten von Delphi mit den entsprechenden Experten und Klassen (TCGIApplication, TCGIRequest- und TCGIResponse) zur Verfügung stehen

    Comment


    • #3
      Sorry, hier der Quelltext um Dir ein Bild dazu zu machen (Borland Deplhi5 PRO)

      <b>Die UNIT-MAIN:</b>
      unit main;
      interface
      uses
      Windows, Messages, SysUtils, Classes, HTTPApp;
      type
      TWebModule1 = class(TWebModule)
      procedure WebModule1hitAction(Sender: TObject; Request: TWebRequest;
      Response: TWebResponse; var Handled: Boolean);
      private
      { Private-Deklarationen }
      public
      { Public-Deklarationen }
      end;

      var
      WebModule1: TWebModule1;

      implementation

      {$R *.DFM}

      procedure TWebModule1.WebModule1hitAction(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
      begin
      response.Content:=Format('<html><body><b>%s</b><br>URL: <b>%s</b><br></body></html>',
      [request.url]);
      end;

      end.

      <b>Das PROJEKT:</b>
      library hit;

      uses
      WebBroker,
      ISAPIApp,
      main in 'main.pas' {WebModule1: TWebModule};

      {$R *.RES}

      exports
      GetExtensionVersion,
      HttpExtensionProc,
      TerminateExtension;

      begin
      Application.Initialize;
      Application.CreateForm(TWebModule1, WebModule1);
      Application.Run;
      end.

      Ich hoffe das Hilft dir weiter!!!

      Danke im Voraus Stefa

      Comment


      • #4
        Hallo,

        ist ist ja alles vorhanden, was man so benötigt.

        Während GET alle Daten an die URL anhängt – wobei die einzelnen Felder durch ein &-Zeichen abgetrennt werden – transportiert POST die Daten über einen HTTP-Datenblock. Web-Anwendungen erzeugen <b>TWebRequest</b>-Objekte, um Client-Anforderungen abzufangen und die enthaltenen Datenbestandteile aufzusplitten. Die Eigenschaften des TWebRequest-Objekts werden von der HTTP-Anforderung übernommen. Für jedes TWebRequest-Objekt erzeugt Delphi auch ein entsprechendes TWebResponse-Objekt, damit die eigene Anwendung den generierten HTML-Output zurück zum Browser schicken kann. Je nachdem, mit welcher Methode der Browser die Daten zur eigenen Anwendung schickt, stellt das Request-Objekt die Informationen entweder über die Eigenschaft <b>QueryFields</b> oder <b>ContentFields</b> zur Verfügung. Beide Eigenschaften stellen den Zugriff auf einen TStrings-Nachfolger zur Verfügung, so dass einzelne Einträge über die <b>Value</b>-Eigenschaft auslesen werden können:

        GET = QueryFields <br>
        POST = ContentFields

        Im Fall der CGI sieht das so aus:

        Aufruf: <b>http://localhost/Scripts/JPGCGI.exe?ID=1001</B>

        Auswertung:
        <pre>
        procedure TWebModule1.WebModule1WebActionGrafik1Action(Sende r: TObject;
        Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

        begin
        FCounterID := Request.QueryFields.Values['ID'];
        FPathInfo := Request.Query;
        Response.Content := PageProducer1.Content;
        end;
        </pre>
        Im eigene HTML-Tags im HTML-Text verwendet werden, kann man nun die Platzhalter-Tags durch die ausgelesenen Werte ersetzen und so zum Beispiel die beim aufruf übergebene ID zurück an den Client liefern (zur Kontrolle):
        <pre>
        procedure TWebModule1.PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
        const TagString: String; TagParams: TStrings; var ReplaceText: String);
        begin
        if TagString = 'CounterID' then
        ReplaceText := FCounterID;
        if TagString = 'PI' then
        ReplaceText := FPathInfo;
        if TagString = 'TagTest' then
        ReplaceText := 'Das ist der TagTest-Eintrag';
        end;
        </pre>

        Der im Browser angezeigte Output sieht dann so aus:<br>
        <i>Das ist ein Test: <br>
        Tag-Test = Das ist der TagTest-Eintrag<br>
        Pathinfo = ID=1001<br>
        CounterID = 1001</i>

        Um nun eine Grafik zurückzuschicken, gibt es zwei Möglichkeiten: <br>
        1. Es wird eine URL aus Verweis auf die Grafikdatei eingefügt, oder <br>
        2. Der Grafikinhalt wird als Stream zurückgeschickt, so dass der Browser diese Grafik sofort anzeigen kann.
        &#10

        Comment

        Working...
        X