![]() |
idHTTP: Post Response ausgeben
Ich will ein POST auf eine PHP-Datei senden und dessen Output in meinem Programm ausgeben. Derzeit sieht meine procedure wie folgt aus:
Delphi-Quellcode:
Wie man schon sehen kann, bekomme ich ein XML-RPC Response und genau den möchte ich ausgegeben haben. Wenn ich mit dem, was ich da bisher habe total falsch liege, kann ich nur sagen, dass ich mir das ganze aus vielen Threads aus dem Forum hier zusammengesucht habe.
procedure TUpdater.btn_UpdateClick(Sender: TObject);
var Server: String; httpData: TMemoryStream; tmpStr: TStringList; begin Server := 'http://localhost/php5/xmlrpc/xmlrpc_client.php'; httpData := TMemoryStream.Create; IdHTTP.Post(Server, httpData); tmpStr := TStringList.Create; try tmpStr.LoadFromStream(httpData); finally tmpStr.Free; end; end; [edit=sakura] [Klammern ersetzt] Mfg, sakura[/edit] |
Re: idHTTP: Post Response ausgeben
schaut für mich eigentlich recht ok aus.
nur verstehe ich nicht, warum du eine reource anforderst. die dann ladest und gleich wieder freigibst?
Delphi-Quellcode:
solltest du nicht eher den http stream wieder freigeben?
try
tmpStr.LoadFromStream(httpData); finally tmpStr.Free; end; und die string list weiter verwenden? Aber ich weiß ja nicht was du sonst so vorhast und spezialist bin ich auch keiner :) Arnulf |
Re: idHTTP: Post Response ausgeben
Hallo freq.9,
du musst das Ergebnis von Post nicht in einen Stream schreiben, sondern du kannst dir die Antwort auch direkt als Rueckgabewert geben lassen und z.B. in ein Memo schreiben:
Delphi-Quellcode:
Alternativ kannst du es auch in einen StringStream oder einen FileStream schreiben und anschliessend was damit machen.
SomeMemo.Text := idHttp1.Post(SomeUrl);
Greetz alcaeus |
Re: idHTTP: Post Response ausgeben
Wow... Hätte nicht gedacht, dass es so einfach wäre. Wie gesagt, ich habe mir das ganze aus Threads aus dem Forum hier zusammengesucht. Also den Response bekomme ich nun ausgegeben nur noch nicht das, was ich will aber mal schauen. Ich versuche nämlich meinen PHP-Client nun in Delphi zu schreiben, da dies ja bei XML-RPC möglich ist :)
Btw: Ich weiss auch, warum ich nicht das bekomme was ich will... :) |
Re: idHTTP: Post Response ausgeben
Okay es scheint doch nicht so einfach zu sein. Also hier mal nen Debugging von meinem PHP-Client:
Code:
Ich will nun folgendes an den Server senden:
Verbindung oeffnen: localhost, port: 80, uri: /php5/xmlrpc/xmlrpc_server.php
HTTP Request senden: POST /php5/xmlrpc/xmlrpc_server.php HTTP/1.1 User-Agent: Blogging API 0.1-alpha (PHP5) Host: localhost:80 Content-Type: text/xml Content-Length: 172 Connection: close <?xml version="1.0" encoding="iso-8859-1"?> <methodCall> <methodName>Foo</methodName> <params> <param> <value> <string/> </value> </param> </params> </methodCall> Warte auf Antwort... Header - HTTP/1.1 200 OK Header - Date: Sun, 05 Jun 2005 11:57:50 GMT Header - Server: Apache/2.0.53 (Win32) Header - X-Powered-By: PHP/5.0.4 Header - Connection: close Header - Transfer-Encoding: chunked Header - Content-Type: text/xml Header - Antwort erhalten: 9d <?xml version="1.0" encoding="utf-8"?> <methodResponse> <params> <param> <value> <boolean>1</boolean> </value> </param> </params> </methodResponse> 0
Code:
und dieses in ein RichEdit schreiben:
<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall> <methodName>Foo</methodName> <params> <param> <value> <string/> </value> </param> </params> </methodCall>
Code:
So sieht der in PHP geschriebene Server aus:
<?xml version="1.0" encoding="utf-8"?>
<methodResponse> <params> <param> <value> <boolean>1</boolean> </value> </param> </params> </methodResponse>
Code:
Wie man da sehen kann wird da nirgends eine Variable abgefragt oder so, also bringt mir ein "daten=<xml-zeugs>" nicht wirklich viel. Der PHP-Client macht dies über den Socket (fsockopen) und schreibt das ganze dann rüber. Wie kann ich das ganze denn dann in Delphi verwirklichen? Ich hoffe mal, dass es wen gibt der das nun versteht. :!
<?php
error_reporting(E_ALL | E_STRICT); ini_set('display_errors', TRUE); ini_set('track_errors', TRUE); function Foo ($method_name, $params, $app_data) { return TRUE; } function Bar ($method_name, $params, $app_data) { return FALSE; } // Hier werden alle Funktionen eingetragen, welche ueber XML-RPC aufrufbar // sein sollen. Wird kein zweiter Wert (Value) angegeben oder ist dieser // NULL, so wird die Funktion mit dem selben Methodennamen registriert. $defined_functions = array( 'Foo' => NULL, 'Bar' => NULL ); // XML-RPC Server erstellen if(($server = xmlrpc_server_create()) !== FALSE) { // Funktion registrieren foreach($defined_functions as $method => $func) { $func = empty($func) ? $method : $func; if(xmlrpc_server_register_method($server, $method, $func) === FALSE) die('Error: method could not be registered'); } $output = xmlrpc_server_call_method( $server, $HTTP_RAW_POST_DATA, '', array( 'output_type' => 'xml', 'encoding' => 'utf-8' ) ); header('Content-Type: text/xml'); echo $output; if(xmlrpc_server_destroy($server) === FALSE) die('Error: could not destroy xml-rpc server'); } else die('Error: could not create xml-rpc server'); ?> |
Re: idHTTP: Post Response ausgeben
ich sehe da in deinem code gerade kein fsockopen, aber ich nehme an, dass du dann in delphi einen server(idTCP?!idTCPServer?!) aufmachen musst und darauf warten, dass das php-skript auf diesen zugreift.
|
Re: idHTTP: Post Response ausgeben
Zitat:
|
Re: idHTTP: Post Response ausgeben
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 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