Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIDHttpServer ... RequestInfo.PostStream = nil (https://www.delphipraxis.net/109886-tidhttpserver-requestinfo-poststream-%3D-nil.html)

GuenterS 9. Mär 2008 16:50


TIDHttpServer ... RequestInfo.PostStream = nil
 
Hallo,

ich versuche gerade mit der HttpServer Komponente der Indy Komponenten, mir einen brachialen WebServer zu schreiben. Im Commandget Ereignis versuche ich die Eigenschaft PostStream von ARequestInfo auszuwerten, jedoch ist die immer nil.

Delphi-Quellcode:
procedure TJDFServer.HttpSrvCommandGet(AThread: TIdPeerThread;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var

  lFileStream: TFileStream;
begin
  lFilestream := TFileStream.Create('c:\temp\log.txt', fmCreate);
  try
     lFileStream.CopyFrom(ARequestInfo.PostStream, ARequestInfo.PostStream.Size);        
  finally
     FreeAndNil(lFileStream);
  end;
end;
Es kracht aber jedesmal da ARequestInfo.PostStream nicht zugewiesen ist.

Kann mir jemand sagen, wie man sonst an die entsprechenden Daten kommt?

SvB 9. Mär 2008 17:40

Re: TIDHttpServer ... RequestInfo.PostStream = nil
 
Benutzt Du die integrierte Version der Indy Komponenten. Falls ja, ist es vielleicht sinnvoll die aktuellste Version herunterzuladen un zu installieren.
Die Version, die z.B. bei D2007 oder RAD 2007 enthalten ist, war auch schon bei D2006 dabei und das ist schon eine ziemlich alter Version.
Eventuell ist in der aktuellen Version der Indy auch ein Rückgabewert <> nil dabei.
Mehr kann ich im Moment auch nicht dazu sagen.

Grüße Sven

marabu 9. Mär 2008 18:50

Re: TIDHttpServer ... RequestInfo.PostStream = nil
 
Hallo Günter,

der Server hat eine property OnCreatePostStream, der du einen eigenen event handler zuweisen kannst. Wenn du dort den PostStream bereit stellst, dann weißt du auch, wie du an die Daten kommst. Ansonsten wird der Ordnung halber intern ein StringStream erzeugt, aber an den kommst du nicht heran.

Freundliche Grüße

GuenterS 9. Mär 2008 19:04

Re: TIDHttpServer ... RequestInfo.PostStream = nil
 
Ich verwende die Version die bei Delphi7 Enterprise dabei ist.


Das mit dem OnCreatePostStream-Event hat funktioniert.


Vielen Dank :-)

Hat es irgendeinen Grund warum das so implementiert wurde, dass man nicht an den internen StringStream herankommt?

marabu 9. Mär 2008 19:17

Re: TIDHttpServer ... RequestInfo.PostStream = nil
 
Zitat:

Zitat von GuenterS
... Hat es irgendeinen Grund warum das so implementiert wurde, dass man nicht an den internen StringStream herankommt? ...

Ich bin nicht Architekt im INDY-Projekt, aber ich hätte es auch so gemacht: Auf diese Weise kann der Entwickler die Art des Streams frei wählen, z.B. TFileStream oder TMemoryStream.

Dani 9. Mär 2008 20:55

Re: TIDHttpServer ... RequestInfo.PostStream = nil
 
Zitat:

Hat es irgendeinen Grund warum das so implementiert wurde, dass man nicht an den internen StringStream herankommt?
Eigentlich dürfte der PostStream niemals nil sein :gruebel:

Delphi-Quellcode:
{
  Rev 1.42    3/14/05 11:45:50 AM RLebeau
  Buf fix for DoExecute() not not filling in the TIdHTTPRequestInfo.FormParams
  correctly.

  Removed LImplicitPostStream variable from DoExecute(), no longer used.
  TIdHTTPRequestInfo takes ownership of the PostStream anyway, so no need to
  free it early. This also allows the PostStream to always be available in the
  OnCommand... event handlers.
}

...

              // Grab Params so we can parse them
              // POSTed data - may exist with GETs also. With GETs, the action
              // params from the form element will be posted
              // TODO: Rune this is the area that needs fixed. Ive hacked it for now
              // Get data can exists with POSTs, but can POST data exist with GETs?
              // If only the first, the solution is easy. If both - need more
              // investigation.

              // i := StrToIntDef(LRequestInfo.Headers.Values['Content-Length'], -1);   {Do not Localize}
              LRequestInfo.PostStream := nil;
              CreatePostStream(AContext, LRequestInfo.RawHeaders, LRequestInfo.FPostStream);
              if LRequestInfo.FPostStream = nil then begin
                LRequestInfo.FPostStream := TMemoryStream.Create;   {Do not Localize}
              end;
Zitat:

Ich verwende die Version die bei Delphi7 Enterprise dabei ist.
Wer lesen kann... (ich = Idiot) :(

marabu 9. Mär 2008 21:08

Re: TIDHttpServer ... RequestInfo.PostStream = nil
 
Hallo Dani,

du hast die falsche (zu neue) Quelle angeschaut. Die bei D7 mitgelieferte (und von Günter benutzte) Version 9 der Indy-Komponenten ist deutlich älter als März 2005.

Freundliche Grüße

GuenterS 9. Mär 2008 21:21

Re: TIDHttpServer ... RequestInfo.PostStream = nil
 
Das ist ja eh toll, aber warum ist der StringStream nicht zugänglich? Man hätte den Inhalt ja an einen Stream seiner Wahl kopieren können.

Ok, das hat sich ja wie Dani schreibt, ja eh gelöst mit neueren Versionen.

@Dani
Wer lesen kann ... herzlichen Dank ... vielleicht selber mal beherzigen.

Dani 9. Mär 2008 21:36

Re: TIDHttpServer ... RequestInfo.PostStream = nil
 
Zitat:

Zitat von GuenterS
@Dani
Wer lesen kann ... herzlichen Dank ... vielleicht selber mal beherzigen.

Öhm, das ging an mich selbst! Ich habe doch überlesen, dass du die mitgelieferte Version verwendest :cheers:

GuenterS 9. Mär 2008 21:50

Re: TIDHttpServer ... RequestInfo.PostStream = nil
 
Zitat:

Zitat von Dani
Zitat:

Zitat von GuenterS
@Dani
Wer lesen kann ... herzlichen Dank ... vielleicht selber mal beherzigen.

Öhm, das ging an mich selbst! Ich habe doch überlesen, dass du die mitgelieferte Version verwendest :cheers:

Ok, tschuldigung... das kam nicht so ganz heraus, bevor du es editiert hast ... ich idiot ist aber übertrieben ... kann ja wohl passieren, wer weiß schon alle Versionen auswendindig...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr.
Seite 1 von 2  1 2      

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