AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIDHttpServer ... RequestInfo.PostStream = nil
Thema durchsuchen
Ansicht
Themen-Optionen

TIDHttpServer ... RequestInfo.PostStream = nil

Ein Thema von GuenterS · begonnen am 9. Mär 2008 · letzter Beitrag vom 10. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#1

TIDHttpServer ... RequestInfo.PostStream = nil

  Alt 9. Mär 2008, 16:50
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?
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: TIDHttpServer ... RequestInfo.PostStream = nil

  Alt 9. Mär 2008, 17:40
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: TIDHttpServer ... RequestInfo.PostStream = nil

  Alt 9. Mär 2008, 18:50
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
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TIDHttpServer ... RequestInfo.PostStream = nil

  Alt 9. Mär 2008, 19:04
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?
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: TIDHttpServer ... RequestInfo.PostStream = nil

  Alt 9. Mär 2008, 19:17
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.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: TIDHttpServer ... RequestInfo.PostStream = nil

  Alt 9. Mär 2008, 20:55
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

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)
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: TIDHttpServer ... RequestInfo.PostStream = nil

  Alt 9. Mär 2008, 21:08
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
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: TIDHttpServer ... RequestInfo.PostStream = nil

  Alt 9. Mär 2008, 21:21
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.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: TIDHttpServer ... RequestInfo.PostStream = nil

  Alt 9. Mär 2008, 21:36
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
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: TIDHttpServer ... RequestInfo.PostStream = nil

  Alt 9. Mär 2008, 21:50
Zitat von Dani:
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
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...
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:17 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