Home » Tipps & Tricks » Netzwerk/Internet » Internet » Per POST Daten an Scripts senden

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.