AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Web Server Anwendungen

Web Server Anwendungen

Ein Thema von Tpercon · begonnen am 7. Jul 2002 · letzter Beitrag vom 31. Okt 2002
Antwort Antwort
Seite 2 von 3     12 3   
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#11
  Alt 8. Jul 2002, 19:26
Das scheint ja alles wirklich viel umständlicher zu sein, als dies mit php zu machen.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#12
  Alt 8. Jul 2002, 19:44
Hier mal ein Beispiel für eine CGI Anwendung:
Code:
program MyCgi;
uses Windows, SysUtils;
{$APPTYPE CONSOLE}

var QueryString: string;
begin
  QueryString := GetEnvironmentVariable('Query_String');
   { Argumente mit ? übergeben: 'MyCgi.exe?Param1=Irgendwas&Post=443' }

  WriteLn('Content-type: text/html');WriteLn; // http-Header schicken
 
  WriteLn('<html><body bgcolor=white>');
  WriteLn('

' + QueryString + </p>');
  WriteLn('</body></html>');
end.
Und so schwer ist das nun auch wieder nicht.
  Mit Zitat antworten Zitat
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#13
  Alt 8. Jul 2002, 19:53
Schwer sieht das nicht aus. Ist denn so der generelle Aufbau oder hast du da jetzt Sachen weggelassen?
Kennst du ne gute Seite wo man sowas lernen kann?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#14
  Alt 8. Jul 2002, 19:59
Ich werde mich jetzt mal dran machen und ein kleines Projekt mit Hilfe von D5 Enterprise erstellen. Also, ein wenig noch...
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Tpercon

Registriert seit: 7. Jun 2002
638 Beiträge
 
Delphi 5 Professional
 
#15
  Alt 8. Jul 2002, 20:00
Du bist der Beste! Laß dir nur Zeit, eilt nicht.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#16
  Alt 8. Jul 2002, 21:07
Zitat von Tpercon:
Ist denn so der generelle Aufbau oder hast du da jetzt Sachen weggelassen?
Ja, das ist der generelle Aufbau wenn du nicht über die bei der Pro und Ent. Version enhaltenen TCGIApplication Klasse programmierst.
Ich habe aber etwas meiner Meinung nach wichtiges weggelassen. Nämlich die Umwandlungsroutine für den Query_String.
Code:
function HexToChar(const S: string): Char;
  function HexCharToByte(c: Char): Byte;
  begin
    if c in ['0'..'9'] then Result := Ord(c) - Ord('0')
     else if c in ['a'..'f'] then Result := 10 + ord(c) - ord('a')
     else if c in ['A'..'F'] then Result := 10 + ord(c) - ord('A')
     else Result := 0;
  end;
begin
  if Length(S) = 2 then
    Result := Char((HexCharToByte(S[1]) shl 4) or (HexCharToByte(S[2])))
  else
    Result := #32;
end;

procedure QueryStringToList(const QueryString: string; List: TStrings);
var
  S: string;
  i: Integer;
  F, P: PChar;
begin
  if QueryString = '' then Exit;
  F := PChar(QueryString);
  P := F;
  while True do
  begin
    if P^ in [#0, '&'] then
    begin
      SetString(S, F, P - F);
      F := P + 1;
      i := 1;
      while i < Length(S) do
      begin
        if S[i] = '%' then
        begin
          S[i] := HexToChar(Copy(S, i + 1, 2));
          Delete(S, i + 1, 2);
        end;
        Inc(i);
      end;
      List.Add(S);
    end;
    if P^ = #0 then Break;
    Inc(P);
  end;
end;
Zitat:
Kennst du ne gute Seite wo man sowas lernen kann?
Ne leider nicht. Ich hab mir das auch nur aus mehreren Quellen zusammengetragen. (QueryStringToList und HexToChar habe ich natürlich selbst geschrieben).
Die Daten in der Environment Variable Query_String sind die GET Daten. Die POST Daten werden kann man über ReadLn einlesen. Die Länge der POST Daten wird durch die Environment Variable "Content_Length" und der Typ der Daten mit "Content_Type" an das CGI Programm übergeben.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#17
  Alt 8. Jul 2002, 21:21
Das Thema interessiert mich auch. Wie kann man Cookie-Daten einlesen?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#18
  Alt 8. Jul 2002, 21:46
Zitat von jbg:
Code:
function GetCookie(Name: string): string;
var
  Cookie: string;
  ps: Integer;
begin
  Result := '';
  Cookie := GetEnvironmentVaiable('HTTP_COOKIE');
  ps := Pos(Name + '=', Cookie);
  if ps > 0 then
  begin
    Delete(Cookie, 1, ps + Length(Name) - 1);
    ps := pos(';', Cookie);
    if ps = 0 then ps := Pos(' ', Cookie);
    if ps = 0 then ps := Length(Cookie) + 1;
    Result := Copy(Cookie, 1, ps - 1);
  end;
end;
Und setzen kann man Cookies, in dem man folgende Prozedur für jedes zu setzendes Name=Value Paar im http-Header aufruft.
Code:
procedure SetCookie(const Name, Value: string);
begin
  WriteLn('Set-Cookie: ', Name, '=' , Value);
end;

...
// Header senden:
WriteLn('Content-type: text/html');
SetCookie('MyC1', 'Something');
SetCookie('MyC2', 'Some other things');
WriteLn; // header abschließen
Und wenn wir gerade dabei sind. So bekommt man heraus, ob die GET oder POST Methode benutzt wird.
Code:
uses Windows, ...;
var
  s: string;
  ContentLength: Integer;

if SameText(GetEnvironmentVariable('REQUEST_METHOD'), 'POST') then begin
begin
  // per POST übertragen -> POST Daten einlesen
  ContentLength := IntToStrDef(GetEnvironmentVariable('Content_Length'), 0);
  SetLength(s, ContentLength);
  if ContentLength > 0 then
    ReadFile(STD_INPUT_HANDLE, s[1], ContentLength, readn, nil);
end;
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#19
  Alt 8. Jul 2002, 21:56
Zu dem GetEnvironmentVariable:
In welcher Unit steht das? Wenn ich das aus der windows.pas benutze, krieg ich ne Fehlermeldung, weil die Parameter falsch sind (ist ja im PDSK klar ersichtlich). Hast du da in deinen Posts einen Fehler gemacht oder beziehst du diese Funktion aus einer anderen Unit?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#20
  Alt 8. Jul 2002, 21:59
Nicht der Beste, aber ich habs in die FAQs gestellt.

http://www.delphipraxis.de/viewtopic.php?p=3215#3215
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz