AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi RPC-Request per TIdTCPClient (Indy)
Thema durchsuchen
Ansicht
Themen-Optionen

RPC-Request per TIdTCPClient (Indy)

Ein Thema von himitsu · begonnen am 16. Jun 2009
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

RPC-Request per TIdTCPClient (Indy)

  Alt 16. Jun 2009, 13:55
Ich hatte jetzt noch nie so richtig mit den Indys gearbeitet

und würd jetzt nur gern mal wissen, ob es so in etwa funktionieren würde...

Hab mich auch schon in der DP umgesehn und auch das "kleine" Tutorial im Delphi-Treff angeguckt,
aber so ganz hab ich da nicht alles verstanden, bzw. es passte nicht zu meinem "Problem".


das Problem, bzw der Grund ist von da:
XML > RPC und Delphi 2009

die Spezifikation des Formates steht so in etwa da drin verteckt:
XML-RPC Specification > Abschnitte "Request example" und "Response example"

ja und mein Code:
- ist erstmal nur so zusammengeschrieben und kommt dann mal in eine Funktion rein
- der Compiler meckert schonmal nicht mehr
- Const sind quasi die Funktions-Parameter
- und in Var versteckt das Result
- ja und hier geht es erstmal nur um die Datenübertragung


quasi eine HTML-ähliche POST-Anfrage und dann das Ergebnis vom Server auslesen:
(die ganzen Funktionen hab ich mir vorwiegend über die Code-Vervollständigung zusammengesucht, in Verbindung mit der OH)
Delphi-Quellcode:
Const TimeOut: Integer = 30000;
  IPVersion: TIdIPVersion = Id_IPv4;
  Host: String = '123.45.67.89';
  Port: Word = 0;
  URI: String = '/RPC2';
  UserAgent: String = 'himXML-RPC/1.0.0 (WinNT)';
  RequestXML: String = '<?xml version="1.0"?><methodCall><methodName>examples</methodName></methodCall>';

Var S: String;
  ResponseHeader: Array of String;
  ResponseXML: String;
  ResponseOK: Boolean;

Begin
  IdTCPClient1.ConnectTimeout := TimeOut;
  IdTCPClient1.ReadTimeout := TimeOut;

  IdTCPClient1.IPVersion := IPVersion;
  IdTCPClient1.Host := Host;
  IdTCPClient1.Port := Port;

  IdTCPClient1.Connect;
  Try
    IdTCPClient1.IOHandler.WriteBufferClear;
    IdTCPClient1.IOHandler.WriteBufferOpen;
    Try
      IdTCPClient1.IOHandler.WriteLn('POST ' + URI + ' HTTP/1.0');
      IdTCPClient1.IOHandler.WriteLn('User-Agent: ' + UserAgent);
      IdTCPClient1.IOHandler.WriteLn('Host: ' + Host);
      IdTCPClient1.IOHandler.WriteLn('Content-Type: text/xml');
      IdTCPClient1.IOHandler.WriteLn('Content-length: ' + IntToStr(Length(RequestXML)));
      IdTCPClient1.IOHandler.WriteLn;
      IdTCPClient1.IOHandler.Write(RequestXML);
      IdTCPClient1.IOHandler.WriteBufferFlush;
      IdTCPClient1.IOHandler.WriteBufferClose;
    Except
      IdTCPClient1.IOHandler.WriteBufferCancel;
      Raise;
    End;

    ResponseHeader := nil;
    Repeat
      S := IdTCPClient1.IOHandler.ReadLn(enUTF8);
      If Trim(S) = 'Then Break;
      SetLength(ResponseHeader, Length(ResponseHeader) + 1);
      ResponseHeader[High(ResponseHeader)] := S;
    Until not IdTCPClient1.Connected;
    ResponseXML := IdTCPClient1.IOHandler.AllData(enUTF8);

    If Assigned(ResponseHeader) Then S := ResponseHeader[0] Else S := '';
    S := Trim(Copy(S, Pos(' ', S) + 1, Length(S)));
    S := Trim(Copy(S, 1, Pos(' ', S) - 1));
    ResponseOK := (Trim(ResponseXML) <> '') and (S = '200');

  Finally
    IdTCPClient1.Disconnect;
  End;
End;

Ich schau mir aber auch grad noch TIdHTTP an und werd mal sehn, wie/ob ich damit klarkomm usw.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 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