Per POST Daten an Scripts senden
Die folgende Funktion sendet Daten per post an ein Script (beispielsweise PHP oder CGI-Script). Die Funktion erwartet drei Parameter: Die idHttp-Komponente, über die gesendet werden soll, die URL zum Script und eine Liste mit Parametern. Die Komponente ist in der Indy-Suite enthalten (siehe Verweise)Als Result gibt die Funktion die Antwort des Scripts als String zurück.
function SendPostData(Ahttp: TIdHTTP; const AtoURL: String; const aParams: TStrings): String; //Ahttp: Die HTTP Komponente von Indy 8.0 bzw. 9.0 //AtoURL: An diese URL werden die Informationen gesendet //Result: HTML-Ergebnis (Antwort des Scripts) Var lStream: TMemoryStream; //HTML-Result des PHP-Scripts lParams: TStringStream; I: Integer; begin Result:=''; if not Assigned(aHttp) then exit; lStream := TMemoryStream.create; lParams := TStringStream.create(''); try AHTTP.Request.ContentType := 'application/x-www-form-urlencoded'; //Dieser Stream wird letztendlich gesendet //Stream mit Werten füllen for I:=0 to aParams.Count-1 do lParams.WriteString(aParams[I] + '&'); try //Stream an das PHP-Script senden AHTTP.Post(AtoURL, lParams, lStream); except on E: Exception do showmessage('Fehler bei der Übertragung: ' + E.Message); end; SetLength(Result,lStream.Size); lStream.Position:=0; lStream.ReadBuffer(Result[1],lStream.Size); finally lParams.Free; lStream.Free; end; end;
Aufgerufen werden kann die Funktion beispielsweise so:
procedure TForm1.Button1Click(Sender: TObject); var sList: TStringlist; begin sList:=TStringList.Create; try sList.Add('parameter1=Hallo'); sList.Add('parameter2=Hi'); Memo1.Text:=SendPostData(idHttp1,'http://domain/post.php',sList); finally sList.Free; end; end;
Es werden zwei Parameter (parameter1 und parameter2) übermittelt und an ein PHP-Script gesendet.Enthalten die Parameter Sonderzeichen (Leertasten, Ampersands…) müssen sie vorher encodet werden. Dies geschieht mit Indy 8.0 durch die Funktion URLEncode. In der 9.0 Version setzt man dafür die Klassenmethode TIdURI.ParamsEncode ein.