![]() |
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? |
Re: Aus eigenem Programm php-Script mit Parametern aufrufen
|
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:
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?
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; |
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:
der flossinger
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; |
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. |
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; |
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.
|
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...? |
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 :? |
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:
Die Parameter können dann in den PHP Variablen $_REQUEST, $_GET oder $_POST ausgewertet werden.
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; Grüße vom marabu |
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 ![]() 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:
Die Variablennamen die im poststring des Delphiclients verwendet werden, brauchen nur mit den Namen beim Auswerten des $_POST[] Arrays zusammenpassen.
echo("line = ".$_POST["line"]."
\n"); 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 |
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:
Die Eintreffende Antwort vom Skript löst das onread Ereignis aus. In der entsprechenden Prozedur verarbeitest du das dann weiter, wie du es brauchst.
intext:=socket.ReceiveText;
der Flossinger |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz