Entwickler-Ecke

Internet / Netzwerk - Problem mit IdHTTP.Post()


FriFra - Mi 20.11.02 14:52
Titel: Problem mit IdHTTP.Post()
:? Ich versuche einen Request vie http.post zu versenden.



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure MyPost();
var
  Input,Output:TStringStream;
begin
  Input := TStringStream.Create('');
  Output := TStringStream.Create('');
  try
    Input.WriteString('RC=@D&ACCT=root&URL=MeinPasswort');
    IdHTTP1.Post('http://192.168.165.1/cgi-bin/logi', Input, Output);
    memo1.Lines.LoadFromStream(Output);
  finally
    FreeAndNil(Input);
    FreeAndNil(Output);
  end;
end;


:idea: Das Problem ist nun, dass sich der bettr. Server dabei immer aufhängt.

:shock: Mache ich das gleiche mit einer html-Seite über den Internet-Explorer funktioniert es (HTML-Quellcode)

Quelltext
1:
2:
3:
4:
5:
6:
7:
<HTML><BODY>
<FORM ACTION=http://192.168.165.1/cgi-bin/logi METHOD=POST>
<INPUT TYPE=HIDDEN NAME=RC VALUE="@D">
<INPUT TYPE=HIDDEN NAME=ACCT VALUE="root">
<INPUT TYPE=PASSWORD NAME=URL SIZE=9 MAXLENGTH=9>
<INPUT TYPE=SUBMIT VALUE="Log in"></FORM>
</BODY></HTML>


:( Ich vermute, dass ich etwas grundlegendes Falsch gemacht habe, aber ich komme nicht weiter. Dadurch, dass der "angepostete" Server meine Posts nicht verkraftet hängt mein Programm nach jedem Post.


matze - Mi 20.11.02 15:08

und wenn du mal probierst das ganze per GET zu übertragen !!

da hängst du die ganzen variablen an die URL an !


FriFra - Mi 20.11.02 15:17

:!: Es muss POST sein, da der Server nur Post akzeptiert!

:x Es muss doch möglich sein irgendwie den gleichen Request abzusetzen wie es auch jeder Browser kann...


bas_gooijen - Fr 22.11.02 21:37

Versuche doch mal:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure MyPost(); 
var 
  Input:TStringList;
  Output:TStringStream; 
begin 
  Input := TStringList.Create; 
  Output := TStringStream.Create(''); 
  try 
    Input.Values['RC']:='@D';
    Input.Values['ACCT']:='root';
    Input.Values['URL']:='MeinPasswort';
    IdHTTP1.Post('http://192.168.165.1/cgi-bin/logi', Input, Output); 
    memo1.Lines.LoadFromStream(Output); 
  finally 
    FreeAndNil(Input); 
    FreeAndNil(Output); 
  end; 
end;


FriFra - Sa 23.11.02 12:35

Auch das war nicht die Lösung. Mein Server akzeptiert auch diesen Request NICHT. Es klappt nach wie vor nur über den Browser...


ao - Sa 23.11.02 13:05

Hallo FriFra,

also bei mir funktioniert folgendes einwandfrei:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  Request, Response: TStringStream;
begin
  Request := TStringStream.Create('');
  Request := TStringStream.Create('');

  FIdHttp.Request.ContentType := 'application/x-www-form-urlencoded';
  Request.WriteString('param1=' +UrlEncode(Trim(Param1.Text), True));
  Request.WriteString('¶m2=' +UrlEncode(Trim(Param2.Text), True));

  FIdHttp.Post('http://server.com/script.php', Request, Response);

  [...]


Vielleicht solltest du die Zeile mit dem ContenType bei dir ergänzen, das war mal das Problem bei mir, ist aber nur eine Vermutung!

Gruß
Andreas


FriFra - Sa 23.11.02 13:18

:cry: Ich habe jetzt auch diesen Code ausprobiert... der Effekt ist der gleiche wie immer... der Server schmiert ab...
:evil: Es muss doch verdammt nochmal möglich sein exact so einen Request wie jeder beliebige Wald und Wiesen Webbrowser das auch kann abzusetzen.


:idea: P.S.: Auf den Server habe ich keinen Einfluss, da es ein embedet Webserver in einem Router ist.