Frage zu Indy HTTP Antwort Stream

real_benedikt

Mitglied
Hallo,

ich habe mal eine Frage.
Dieses "Script" habe ich auf einer Seite gefunden:

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    EMailEdit: TEdit;
    TextMemo: TMemo;
    ResponseMemo: TMemo;
    Label1: TLabel;

    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  PostStrings: TStringList;    //Zusammengesetze Post-Daten
  ResponseStream:TStringStream;//Ausgabe der Aufgerufenen Seite
  ausgabe:String;              //Ausgabe der aufgerufenen Seite als String
  zeile:String;                //Zum zeilenweisen Ausgeben der Rückgabe der Aufgerufenen Seite benutzte Zwischenvariable
  i:Integer;                   //Zähler für die For-Schleife
begin
  ResponseStream:=TStringStream.Create('');//Rückgabe-Stream erstellen
  PostStrings := TStringList.Create;   //Post-Daten-StringList erstellen
  try
    PostStrings.Add('name='+EMailEdit.Text);    //Post-Daten in die StringList eintragen
    PostStrings.Add('password='+TextMemo.Lines.Text);
    try
      idHTTP1.Post('http://www.domain.de/get/', PostStrings,Responsestream);//Datei abrufen
      ausgabe:=ResponseStream.DataString; //Ausbage-Sring die zurückgegebenen Daten zuweisen
      zeile:=''; //Zwischenvariable leeren
      for i:=1 to Length(ausgabe) do begin //For-Schleife zum formatieren der Ausgabe (Zeilenumbrüche korrekt darstellen)
        if (ausgabe[i]=#13) and (ausgabe[i+1]=#10) then begin //Bei Zeilenumbruch
          ResponseMemo.Lines.Add(zeile);
          zeile:='';
        end else if ausgabe[i]<>#10 Then zeile:=zeile+ausgabe[i];
      end;
      ResponseMemo.Lines.Add(zeile);
    except //Fehlerbehandlung
     on E: Exception do
       showmessage('Error encountered during POST: ' + E.Message);
    end;
  finally
    PostStrings.Free;
    ResponseStream.Free;
  end;
end;


end.

Und dazu dieses PHP Script:

Code:
<?php
echo 'Name: '.$_POST["name"]; //Ausgeben der E-Mail-Adresse
echo Chr(13).Chr(10); //Zeilenumbruch
echo 'Passwort: '.$_POST["password"];

?>

Nun angenommen das PHP Script soll aus einer MySQL Datenbank mehrere Daten holen, und ausgeben.

Wie kann ich, wenn zum Beispiel der Wert Telefonnummer ausgegeben wird, die Antwort in eine leere Variable im Delphi Script speichern.

(Es kommt aber nicht nur zum Beispiel Telefonnummer sondern noch viel mehr auf einmal raus...) :confused::confused:
 
Hallo,
Nachdem du dich, wie mir scheint, mit deinem Username/Passwort welche per POST
übertragen werden angemeldet hast, wird der Quellcode, sprich der HTML-Code, der Seite
(welche deine Telefonnummern, etc. enthält) in dem ResponseStream gespeichert.

Da es sich hierbei um einen großen, langen String handelt wird dir nichts anderes übrigbleiben als die gewünschten Werte zu parsen, sprich "rauszuschneiden".
Dafür suchst du dir bestimmte Anhaltspunkte im Quellcode.
Beispiel:
PHP:
<html>
  <h1>Überschrift</h1>
  <p>Tel: 01602674833</p>
  <p>Ort: München</p>
</html>


In diesem Fall wären die <p>-Tags ein guter Anhaltspunkt. Die einzelnen Werte
kannst du dann mit Copy ausschneiden. Abschliessend müsstest du vlt noch in andere Dateitypen casten, sprich beispielsweise mit StrToInt.

mfg, Kangaxx
 

Neue Beiträge

Zurück