Entwickler-Ecke
Internet / Netzwerk - TidHTTP (Indy): Nicht auf Anfrage-Ergebnis warten
Experience1986 - Mo 27.02.06 21:58
Titel: TidHTTP (Indy): Nicht auf Anfrage-Ergebnis warten
Hi,
ich nutze folgenden Code, um mit der Indy-Komponente TidHTTP Daten an ein PHP-Script zu senden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| function SendPostData(Ahttp: TIdHTTP; const AtoURL: String; const aParams: TStrings): String; Var lStream: TMemoryStream; lParams: TStringStream; I: Integer; begin Result:='';
if not EnableInternetProcesses then exit;
if not Assigned(aHttp) then exit; lStream := TMemoryStream.create; lParams := TStringStream.create(''); try Ahttp.AllowCookies:=true; AHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
for I:=0 to aParams.Count-1 do lParams.WriteString(aParams[I] + '&');
try AHTTP.Post(AtoURL, lParams, lStream); except
end; SetLength(Result,lStream.Size); lStream.Position:=0; lStream.ReadBuffer(Result[1],lStream.Size); finally lParams.Free; lStream.Free; end; end; |
Besteht nun aber keine Internet-Verbindung bzw. stimmt mit der Adressierung des Scriptes etwas nicht, so Stoppt die gesamte Anwendung bis der HTTP-Timeout erfolgt.
Kann man diesen Stopp umgehen? Wenn nicht, wie kann man den HTTP-Timeout verkürzen?
GTA-Place - Di 28.02.06 02:40
Vielleicht hilft es, das ganze in einen Thread auszulagern.
Wobei das aber vielleicht overkill ist.
Den TimeOut kannste im Objektinspektor von idHTTP ändern.
Experience1986 - Di 28.02.06 02:44
In wie fern auslagern? in eine DLL oder in eine seperate EXE?
Wenn ich die Eigenschaft Timeout ändere, scheint idHTTP das nicht so wirklich zu übernehmen, sprich, ist keine Internet vorhanden, so brauch die Komponente immer noch ewig.
GTA-Place - Di 28.02.06 02:55
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| type TMainForm = class(TForm) [...] private Info: TThread; end;
TInfo = class(TThread) protected procedure Execute; override; end;
[...]
implementation
[...]
procedure TInfo.Execute; begin Terminate; end;
[...]
procedure TMainForm.FormShow(Sender: TObject); begin if not Assigned(Info) then begin Info := TInfo.Create(True); with Info do begin FreeOnTerminate := True; Resume; end; end; end;
[...]
end. |
Experience1986 - Di 28.02.06 15:39
Danke... Abe rin wie fern könnte das zum overkill werden?
GTA-Place - Di 28.02.06 19:09
Die Frage ist, obs net ne bessere Möglichkeit gibt.
Weil wegen ner kleinen Abfrage gleich nen ganzen Thread benutzen :?
Hast du es mal mit IdAntiFreeze von Indy probiert? Vielleicht geht das ja.
Experience1986 - Di 28.02.06 21:30
Und wie kann ich diese Nutzen?
Muss ich die idHTTP denn damit "verbidnen"?
Und was steckt hinter der idAntiFreeze
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!