Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Aus eigenem Programm php-Script mit Parametern aufrufen (https://www.delphipraxis.net/53192-aus-eigenem-programm-php-script-mit-parametern-aufrufen.html)

torud 12. Sep 2005 05:22


Aus eigenem Programm php-Script mit Parametern aufrufen
 
Hallo Wissende!

Ich muss unbedingt einen Weg finden, wie ich sicherstellen kann, dass ich aus meiner Applikation ein eigenes php-Script im Internet aufrufen kann. Da mir der Weg über den Webbrowser zu kompliziert ist, wollte ich wissen, ob ich das auch einfacher haben kann, da ich keine visuelle Bestätigung brauche und das Script nur einen Arbeitsgang für mich erledigen soll.

Wie muss ich das machen, oder welche Komponenten sind dafür geeignet?

marabu 12. Sep 2005 05:51

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
Hallo Tom,

vielleicht hilft dir das hier weiter: klick.

Grüße vom marabu

torud 12. Sep 2005 05:57

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
Hallo Marabu!

Danke für Deine Antwort. Ich muss aber leider nochmal fragen was Du meinst. Ich denke, dass es sich darum dreht???

Delphi-Quellcode:
procedure Download(url, filename: string);
var
  fs: TFileStream;
  http: TIdHttp;
begin
  fs := TFileStream.Create(fileName, fmCreate);
  http := TIdHttp.Create(nil);
  http.Get(url, fs);
  http.Free;
  fs.Free;
end;
Ok, dann entnehme ich, dass es sich hier um die INDY-Kompos handelt!? So weit so gut. Wie aber kann ich diese procedure für mich nutzen und einem Script damit Parameter übergeben?

flossinger 12. Sep 2005 06:04

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
Hallo Tom,

bin zwar kein Wissender, aber das Folgende hab ich ausprobiert.

Mit tclientsocket geht das problemlos. Mein Beispiel ist zwar primitiv, vielleicht kannst du das umstricken, hauptsächlich geht es darum, das http Protokoll einzuhalten.
Code:
procedure sendline(from,whereto,outtext:string;csock:tclientsocket;host,path:string);
const crlf=char(13)+char(10);
var request,poststring:string;
begin
poststring := 'from=' +from
            + '&to=' +whereto
            + '&line='+urlencode(outtext)
            ;
request := 'POST '+path+' HTTP/1.1'+crlf
         + 'Content-Type: application/x-www-form-urlencoded'+crlf // bewirkt Übergabe in $_POST
         + 'User-Agent: Chatting-RubberDuck'+crlf
         + 'Host: '+host+crlf
         + 'Connection: Keep-Alive'+crlf
         + 'Content-Length: '+inttostr(length(poststring))+crlf
         + crlf
         + poststring
         + crlf
         ;
csock.socket.sendtext(request);
end;
der flossinger

torud 12. Sep 2005 06:07

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
Hallo Flossinger!

Ich werds mal probieren, würde aber gern noch wissen, was denn eigentlich bei diesen Params übergeben werden muss.


'from=' +from => Meine EMailAdresse?
'&to=' +whereto => ???
urlencode(outtext) => ???

path => Pfad zum Script???

'User-Agent: Chatting-RubberDuck'+crlf
'Host: '+host+crlf
'Connection: Keep-Alive'+crlf
'Content-Length: '+inttostr(length(poststring))+crlf

poststring

Ich weiss, ich sdtelle mich mal wieder dämlich an, aber ich frage immer gern mal nach, bevor ich in die falsche Richtung entwickle.

SirThornberry 12. Sep 2005 07:39

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
mit idhttp geht das bedeutend einfacher
Delphi-Quellcode:
var idhttp1: TIdhttp;
    parameter: TStringlist;
begin
  idhttp1 := TIdhttp.Create(nil);
  parameter.Add('username=UsernameDenManImBrowserEingebenWürde');
  parameter.Add('password=PasswortDasManImBrowserEingebenWürde');
  idhttp1.Post('http://xxyz', parameter);
  idhttp1.Free;
end;

franktron 12. Sep 2005 08:09

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
Gibts das auch irgendwie eine möglichkeit eine Antwort zu bekommen z.b. das Script gibt einen Text aus, kann man denn auch irdenwie wieder kriegen.

torud 12. Sep 2005 08:55

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
Hallo!

Diesen Fehler erhalte ich, wenn ich den Code compiliere.
Woran kann das liegen???

[Fehler] Unit1.pas(40): Es gibt keine überladene Version von 'Post', die man mit diesen Argumenten aufrufen kann

Dann würde ich gern noch wissen, ob die in Parameter übergeben Inhalte auch als "Post" im Script ausgelesen werden können...?

n0b0dy 12. Sep 2005 09:44

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
hi,

ist es evtl Möglich, dass indy 10 das Post umbenannt hat? ich finde es nämlich bei mir im mom auch nur bei indy 9 :?

marabu 12. Sep 2005 10:10

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
Hallo Leute,

hier nochmal für alle, die mit der indy online help nicht zurecht kommen:

Delphi-Quellcode:
const
  url = 'http://localhost/torud.php';

procedure TDemoForm.PostButtonClick(Sender: TObject);
var
  params: TStrings;
begin
  params := TStringList.Create;
  params.Values['a'] := 'aaa';
  params.Values['b'] := 'bbb';
  Memo.Lines.Text := idHTTP.Post(url, params);
  params.free;
end;

procedure TDemoForm.GetButtonClick(Sender: TObject);
begin
  Memo.Lines.Text := idHTTP.Get(url + '?a=aaa&b=bbb');
end;
Die Parameter können dann in den PHP Variablen $_REQUEST, $_GET oder $_POST ausgewertet werden.

Grüße vom marabu

flossinger 12. Sep 2005 17:43

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
Hallo Tom,

jetzt bin ich aus der Arbeit zurück und kann mir die Fragen ansehen.

host ist der Hostname, also 127.0.0.1 oder www.einserver.at oder wie dein Server auch heissen mag.
path ist der Name deines skripts inklusive Pfad nach dem Hostnamen, also etwas wie /users/tom/ultimatescript.php oder so.

die Variablen "from" "to" und "line" brauche ICH in MEINEM Script, DU wählst dir einfach Variablennamen aus und Inhalte, die DU in DEINEM skript verarbeiten willst. Auch deinen User-Agent wirst du anders nennen wollen.

Wie gesagt verwendet mein Beispiel ein tclientsocket und verwendet die Methode POST zur Parameterübergabe an das php. Das funktioniert exakt so, als würdest du ein http form haben mit der Angabe method="POST". Beachte, dass POST keine Methode vom tclientsocket ist, sondern eine Methode des Webservers, wie er die Variablen annimmt und an dein php weiterreicht.

Im php liest du eine Variable Beispielsweise folgendermassen aus:
Code:
   echo("line = ".$_POST["line"]."
\n");
Die Variablennamen die im poststring des Delphiclients verwendet werden, brauchen nur mit den Namen beim Auswerten des $_POST[] Arrays zusammenpassen.

So, vielleicht ist es jetzt klarer geworden, wenn noch was fehlt, frage ruhig. Dämlich wäre es ja nur, wenn man NICHT fragt, wenn Information fehlt.

Zu deiner Fehlermeldung kann ich nichts sagen, wenn du den Quelltext nicht mitteilst.

Grüsse,
der Flossinger

flossinger 12. Sep 2005 17:55

Re: Aus eigenem Programm php-Script mit Parametern aufrufen
 
Hallo Frank,

fast immer wird so ein Skript antworten. Entweder braucht man das Ergebnis, oder man will zumindest wissen, ob die Info dort angekommen ist und verarbeitet wurde.

Wenn man so wie in meinem Beispiel mit einem tclientsocket arbeitet braucht man nur in der onread Prozedur etwas ähnliches wie das folgende haben:
Code:
intext:=socket.ReceiveText;
Die Eintreffende Antwort vom Skript löst das onread Ereignis aus. In der entsprechenden Prozedur verarbeitest du das dann weiter, wie du es brauchst.

der Flossinger


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz