13. 09. 2007. | #1 |
Predrag Supurović
Grand Master
Datum učlanjenja: 24.01.2006
Lokacija: Užice
Poruke: 791
Hvala: 3
200 "Hvala" u 12 poruka
|
CGI apliakcija u Delphi-ju
Da li je neko radio u Delphiju neku VGI aplikaciju? Imam problem koji nije vezan samo sa CGI.
Naime, kada konzolnoj aplikaciji posaljem sadrzaj preo DOS redirekcije (to je isti princip kako se CGI-ju prosledjuju podaci od web servera), izgleda da Delphi ima probem ako je sadrzaj binaran - cita sadrzaj donekle i onda se zbuni. U mom primeru, kad nadije karakter $1A, Delphi posle njega cita sve bajtove kao da imaju vrednost $1A iako to nije tacno. Ovo mi paviproblem kada imam fileupload koji se prosledjuje CGI-ju napravljenom u Delphiju. Ako se pojavi neki problematican karakter, komunikacija puca, ili sadrzaj bude neispravno procitan. Evo test koda koji ne radikako treba: Kôd:
program cgitest; {$APPTYPE CONSOLE} uses SysUtils, Windows; var Buf: PChar; BufSize: Integer; BufValue : string; Code : Integer; ContentLength : integer; i : integer; inchar : char; InLimit : Integer; function GetEnvVarValue(const VarName: string): string; var BufSize: Integer; // buffer size required for value begin // Get required buffer size (inc. terminal #0) BufSize := GetEnvironmentVariable(PChar(VarName), nil, 0); if BufSize > 0 then begin // Read env var value into result string SetLength(Result, BufSize - 1); GetEnvironmentVariable(PChar(VarName), PChar(Result), BufSize); end else // No such environment variable Result := ''; end; begin // set this to any value greater than zero to limit number of characters read // from input stream. If server stalls on upload, limit this to 1 character // and then increase until it stalls again that way you wil find exact byte // which makes server to stall. InLimit := 0; WriteLn('Content-Type: text/html'); WriteLn; WriteLn ('<html>'); WriteLn ('<body>'); BufValue := GetEnvVarValue ('CONTENT_LENGTH'); Writeln (BufValue); Val (BufValue, ContentLength, Code); if ((inLimit >0) and (InLimit < ContentLength)) then ContentLength := InLimit; WriteLn ('<h1>CGI-TEST</h1>'); WriteLn ('<p>Content length:' + BufValue + '</p>'); if (inLimit > 0) then WriteLn ('<p>Forced read limit: ' + IntToStr (ContentLength) + '</p>'); WriteLn ('</p>'); WriteLn ('<pre>'); for i :=1 to ContentLength do begin read(input, inchar); // Write (IntToHex (Ord (inchar), 2)); Write (inchar); end; WriteLn ('</pre>'); WriteLn ('</body>'); WriteLn ('</html>'); end. Postoji li jos neki nacin da se iz Delphija procitaju podciposlati na standardni ulaz, redirekcijom? Prekopah ceo Internet i nigde nisam nasao da se ovaj problem uopste pominje.
__________________
Peđina beležnica (blog) - www.uzice.net - wireless.uzice.net - www.vokabular.org - www.vodic.net - forum.uzice.net |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Znate li Delphi i SQL? | dmajkic | Poslovne ponude i zapošljavanje | 7 | 12. 10. 2008. 08:37 |
Apliakcija za streaming | Marko Medojevic | Web aplikacije, web servisi i software | 11 | 03. 10. 2007. 08:17 |
Delphi for PHP | Ilija Studen | Web aplikacije, web servisi i software | 16 | 13. 05. 2007. 12:06 |
Delphi i ModelMaker | oki030 | Programiranje | 0 | 21. 04. 2006. 15:20 |
C++ ili Delphi programer | mega023 | Poslovne ponude i zapošljavanje | 0 | 17. 11. 2005. 20:23 |