Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi HTTPS / G-Server (https://www.delphipraxis.net/148802-https-g-server.html)

Jens Hartmann 8. Mär 2010 20:21


HTTPS / G-Server
 
Guten Abend,

ich habe folgende Aufgabe bekommen und glaube auch zumindestens die Lösung gedanklich realisieren zu können. Ich muss einen
G-Server bedienen.
G-Server

Dieser G-Server soll als Verbindung zwischen einer Applikation und einer HiPath Telefonanlage stehen. Der G-Server kann HTTPS Befehle entgegen nehmen und gibt diese automatisch an die Telefonanlage zur Signalisierung weiter.

Nach ein wenig Google und DP, denke ich den Lösungsweg soweit gefunden zu haben. Problematisch dabei ist zur Zeit das ich keine HiPath TK-Anlage zur Hand habe aber trotzdem gerne Versuchen würde zu prüfen, ob es eine Lösung gibt, und wenn wie groß der Aufwand der Entwicklung wäre.

HTTPS Response

Mein Gedanke wäre jetzt eigendlich, so wie im Beispiel oben eine StringList in der ich eine html bzw. xml Datei erstelle, und dies dann über die Postfuntkion an den Server sende. Ist der Gedankengang realistisch, oder übersehe ich da irgendwas. :gruebel:

Gruß Jens

mjustin 9. Mär 2010 13:28

Re: HTTPS / G-Server
 
Mein Vorschlag ist, den Server zu simulieren (mit oder ohne HTTP) und an diesen dann die selbstgebackenen Requests zu senden.

Für die Erzeugung der XML Inhalte würde ich etwas zeitgemäßeres (IXNLDocument) verwenden, da damit Fehler durch falsche XML Strukturen vermieden werden.

Für den Test würde ich DUnit verwenden, darin kann dann der Request ausgewertet und mit dem Soll-Ergebnis verglichen werden. DUnit ist besonders hilfreich wenn sehr viele wiederkehrende Tests ausgeführt werden sollen. Es ist zugleich auch eine Art Dokumentation, wenn in den DUnit Tests die Schritte zur Erzeugung und Verarbeitung von Request (und Response) dargestellt werden.

Jens Hartmann 11. Mär 2010 22:49

Re: HTTPS / G-Server
 
So, jetzt habe ich nach langem suchen endlich gefunden, was überhaupt genau benötigt wird.

G-Ser ver

Scheint auch eigendlich ganz simple zu sein. Allerdings, habe ich noch nie mit IdHttp Komponenten gearbeitet. Und wenn ich das alles richtig verstanden habe, müsste es damit gehen.

Ich muss ja nur die entsprechenden url´s senden.

Kann mir jemand einen Tip für ein gutes Indy Tutorial oder speziell für diese Komponente nennen.

Gruß Jens

DataCool 12. Mär 2010 10:52

Re: HTTPS / G-Server
 
@Jens:

In diesem Fall sollte ein "einfaches":
Delphi-Quellcode:
var sResponse : String;
    sURL : String;
begin
  sURL := 'www.xyz.de/blabla.cgi?paramater=usw';
  sResponse := Idhttp1.Get(sUrl);
end;
Dir schon weiter helfen, oder ?

Greetz Data

Jens Hartmann 12. Mär 2010 11:48

Re: HTTPS / G-Server
 
Liste der Anhänge anzeigen (Anzahl: 1)
Von der Sache her gebe ich Dir recht. Da ich aber bislang noch nie mit den Komponenten gearbeitet habe, wäre ein Tutorial halt nicht schlecht. Weil sonst fang ich wieder an, bei jeder Kleinigkeit zu fragen.

Wenn ich einfach nur das mache was Du geschrieben hast, bring mir Delphi den im Anhang gezeigten Fehler. Es handelt sich ja wahrscheinlich nur um einen Berechtigungsfehler, Zugangsdaten etc. aber um nicht nach solchen vermutlich dämlichen Sachen zu fragen, würde ich halt gerne erstmal ein Turorial über die idHttp Kompo lesen. Damit ich den Umgang damit überhaupt verstehe.

Danke aber trotzdem.

Gruß Jens

DeddyH 12. Mär 2010 11:49

Re: HTTPS / G-Server
 
Anhang vergessen? :zwinker:

Jens Hartmann 16. Mär 2010 20:32

Re: HTTPS / G-Server
 
Keiner eine Idee für ein Tutorial?

Gruß Jens

Jens Hartmann 10. Mai 2010 20:13

Re: HTTPS / G-Server
 
Hallo und schönen guten Abend zusammen,

so nach etwas suchen und Hardware Beschaffung, habe ich die Anbindung an diesen G-Server weitesgehend verstanden. Mein Problem ist allerdings, das ich mit Delphi sowas noch nie gemacht habe. Daher möchte ich es jetzt einfach nochmal versuchen, ob mir hier jemand helfen kann.

Eigendlich muss ich gar nicht so viel machen, ich muss lediglich den folgenden String aus meinem Programm senden, als würde ich diesen in eine Webbrowser als Url eingeben.

Code:
[url]http://127.0.0.1:8801/cgi-bin/gadgetapi?cmd=SetDisplay&device=101&contentsOfDisplay=MeinText[/url].....
Kann mir da vieleicht jemand einen Tip geben, oder zumindest einen Bereich wo ich mich einlesen kann.

Danke schon mal und

Gruß Jens

mjustin 10. Mai 2010 20:31

Re: HTTPS / G-Server
 
Code:
[url]http://127.0.0.1:8801/cgi-bin/gadgetapi?cmd=SetDisplay&device=101&contentsOfDisplay=MeinText[/url].....
Das sieht wie ein einfacher HTTP GET Request aus, mit 127.0.0.1 als Host, Port 8801, und mehreren Parametern. Mit einem HTTP Client für Delphi wie der Indy Klasse TIdHTTP ist das leicht aufgebaut. Die Parameter kann man einzeln hinzufügen, eventuell verwendete Umlaute und Sonderzeichen werden dann für den Request dann automatisch umkodiert.

Beiträge zur allgemeinen Verwendung von TIdHTTP sollten leicht aufspürbar sein. Alternativ kann auch die Synapse TCP/IP Bibliothek (ebenfalls Open Source) eingesetzt werden.

Hope this helps

Jens Hartmann 10. Mai 2010 20:35

Re: HTTPS / G-Server
 
Danke mjustin,

werde ich gleich mal nach suchen.

Gruß Jens

Jens Hartmann 15. Jun 2010 07:16

AW: HTTPS / G-Server
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

es war so wie mjustin gesagt hat. Ich hatte das auch bis eben alles am laufen. Allerdings gibt es eine neue Version von diesem G-Server der vermutlich eine anderes Protokoll nutzt.

Die Frage ist, was mache ich falsch, bzw. wie kann ich das mit der Http Indy Kompo anpassen. Hier mal mein Code und im Anhang die Fehlermeldung...

Delphi-Quellcode:
procedure TfGServer.btnGServerClick(Sender: TObject);
var
  s: String;
  Params: TStrings;
  Cookie : String;
begin
  Params := TStringList.Create;
    try
      mmoDiagnose.Clear;
      Params.add('gsUser='+edtLoginName.Text);
      Params.Add('gsPass='+edtLoginPass.Text);
      mmoDiagnose.Lines.Add
        (idhtpGServer.Post('http://'+edtIPGServer.Text+':'+edtPort.Text+'/login', Params));
      Cookie:= IdCookieManager.CookieCollection.Items[0].CookieText;
      idhtpGServer.Request.CustomHeaders.Add('Cookie:' + Cookie);
      mmoDiagnose.Lines.Add('');
      mmoDiagnose.Lines.Add
        (idhtpGServer.Get('http://'+edtIPGServer.Text+':'+edtPort.Text+
        '/cgi-bin/gadgetapi?cmd=SetDisplay&device='+edtNumber.Text+
        '&contentsOfDisplay='+edtGServerText.Text));
   finally
      Params.free;
    end;
end;
Gruß Jens

gsh 15. Jun 2010 07:44

AW: HTTPS / G-Server
 
Delphi-Quellcode:
idhtpGServer.HandleRedirects := true;

Jens Hartmann 15. Jun 2010 07:55

AW: HTTPS / G-Server
 
Danke, das war´s.

Gruß Jens

Jens Hartmann 17. Jun 2010 08:31

AW: HTTPS / G-Server
 
Hallo zusammen,

Jetzt stehe ich mit der ganzen Sache schon wieder vor einem Problem. Mit der Diagnose Software, kann man z.B. folgenden Text an ein Telefon über IP senden...

"Hallo ich bin ein Text"

Dieser wird auch komplett im Display des entsprechenden Endgerätes angezeigt. Sende ich den selben String über meine Software, wird nur das erste Wort im Display des Endgerätes angezeigt. Ich vermute das hat irgendwas mit den Leerzeichen im HTTP zu tun.:gruebel:

Hat da jemand eine Idee, wie man sowas macht?

Gruß Jens

nahpets 17. Jun 2010 08:55

AW: HTTPS / G-Server
 
Hallo,

schau mal bitte bei Wikipedia nach: http://de.wikipedia.org/wiki/Leerzeichen und dort nach "Leerzeichen in URIs" suchen.

Demnach müsste es zwei Möglichkeiten geben: Leerzeichen durch + ersetzen oder Leerzeichen durch %20 ersetzen.

Jens Hartmann 17. Jun 2010 12:10

AW: HTTPS / G-Server
 
Danke,

es ist immer wieder schön mit Euch. Ich habe jetzt mal gesucht und dabei festgestellt, das so Zeichen wie '+' etc. auch zu diesem Problem führen. Die Lösung ist mir auch klar.

Delphi-Quellcode:
StringReplace
Gibt es irgendwo eine Übersicht der Sonderzeichen und deren Umwandlung.

Gruß Jens

Assertor 17. Jun 2010 12:17

AW: HTTPS / G-Server
 
Hallo Jens,

Zitat:

Zitat von Jens Hartmann (Beitrag 1029606)
es ist immer wieder schön mit Euch. Ich habe jetzt mal gesucht und dabei festgestellt, das so Zeichen wie '+' etc. auch zu diesem Problem führen. Die Lösung ist mir auch klar.
[...]
Gibt es irgendwo eine Übersicht der Sonderzeichen und deren Umwandlung.


Spar Dir das, binde einfach die Unit IdURL ein und nutze es so:
Delphi-Quellcode:
s := TIdURI.URLEncode(mystring);


Gruß,
Assertor

Jens Hartmann 17. Jun 2010 12:34

AW: HTTPS / G-Server
 
Danke für den Tip,

allerdings Funktioniert das nicht. Das Funktion Ersetzt mir die Leerzeichen nicht mit einem %20 etc. Diese müssen aber im String enthalten sein, da ich diesen sonst nicht senden kann.

Die Telefonanlage, benötigt diese Zeichen, um diese wieder in Leerzeichen umwandeln zu können.

Gruß Jens

Assertor 17. Jun 2010 12:42

AW: HTTPS / G-Server
 
Hallo Jens,

Zitat:

Zitat von Jens Hartmann (Beitrag 1029614)
Danke für den Tip,

allerdings Funktioniert das nicht. Das Funktion Ersetzt mir die Leerzeichen nicht mit einem %20 etc. Diese müssen aber im String enthalten sein, da ich diesen sonst nicht senden kann.

Die Telefonanlage, benötigt diese Zeichen, um diese wieder in Leerzeichen umwandeln zu können.

Das ist schon klar, URLEncode sollte die Range außerhalb des darstellbaren ASCII Bereichs eigentlich vollständig kodieren (also auch Leerzeichen zu %20). Da scheint es wieder so einen Sonderfall beim Space zu geben (Indy Kompatibilitätsgründe?)...

Dann am besten Dein Space-Replace mit dem URLEncode() kombinieren. Das sollte gehen.

Gruß,
Assertor

Jens Hartmann 17. Jun 2010 13:11

AW: HTTPS / G-Server
 
Das ist leider so. Die Funktion ist zwar OK, aber der Fehler ist bei dem Zeichen + z.B. genauso. Die Decode Funktion ist leider auch nicht besser.

Habe das ganze jetzt mit StringReplaced gelöst. Allerdings weiß ich nicht, welche Zeichen noch Problem verursachen.

Gruß Jens

Assertor 17. Jun 2010 13:26

AW: HTTPS / G-Server
 
Hallo Jens,

Zitat:

Zitat von Jens Hartmann (Beitrag 1029620)
Das ist leider so. Die Funktion ist zwar OK, aber der Fehler ist bei dem Zeichen + z.B. genauso. Die Decode Funktion ist leider auch nicht besser.

Habe das ganze jetzt mit StringReplaced gelöst. Allerdings weiß ich nicht, welche Zeichen noch Problem verursachen.


Also irgendwas stimmt da nicht: Nehme ich ein frisches Delphi 2010 mit der Release Version von Indy (das dürfte doch Deine Konfiguration sein?), dann funktioniert es für das Leerzeichen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Text := TIdURI.URLEncode('http://127.0.0.1:8801/cgi-bin/gadgetapi?cmd=SetDisplay&device=101&contentsOfDisplay=MeinText abc +');
end;
Ausgabe:
Code:
http://127.0.0.1:8801/cgi-bin/gadgetapi?cmd=SetDisplay&device=101&contentsOfDisplay=MeinText%20abc%20+
Das "+" wird aber von Indy tatsächlich, bewußt nicht kodiert. Die Parametertrennung zu kodieren hatte früher den Benutzern zu viele Probleme gemacht.

Zu dem Bereich der gültigen Chars: Alles außerhalb US-ASCII muß kodiert werden (siehe http://www.ietf.org/rfc/rfc1738.txt).

Gruß,
Assertor

Jens Hartmann 17. Jun 2010 13:34

AW: HTTPS / G-Server
 
Zitat:

Zitat von Assertor
Also irgendwas stimmt da nicht: Nehme ich ein frisches Delphi 2010 mit der Release Version von Indy (das dürfte doch Deine Konfiguration sein?), dann funktioniert es für das Leerzeichen:

Das kann sein, bei mir leider nicht, ich nutze allerdings Delphi 2007. Ich habe das jetzt nochmal identisch zu deinem Code aufgebaut und den Text in eine Memo schreiben lassen. Leerzeichen sind Leerzeichen und nicht %20.

Danke übrigens für die Liste

Gruß Jens

Assertor 17. Jun 2010 13:38

AW: HTTPS / G-Server
 
Hallo Jens,

keine Ursache. Im Fließtext des RFC steht in der Mitta ca., wie encodiert werden muß.

Mit Deiner Delphi Version bin ich im Post verrutscht, mein Fehler :oops:

Mit der alten Indy Version wird das nichts, also nimm ruhig StringReplace o.ä. Bei dem eingeschränkten Zeichensatz könntest Du auch eine Positivliste machen (a..z, A..Z, 0..9 und ein paar Sonderzeichen), alles andere fliegt raus bzw. wird wie das Leerzeichen URL-encoded.

Viele Grüße,
Assertor

Jens Hartmann 17. Jun 2010 13:46

AW: HTTPS / G-Server
 
Kein Problem,

trotzdem Danke. Vieleicht muss ich doch langsam mal überlegen umzusteigen.

Gruß Jens

bertramgeck 19. Jun 2010 13:31

AW: HTTPS / G-Server
 
Hallo,
vielleicht hilft es ein wenig:
http://www.gebecom.de/sdk/wiki/index...itle=Main_Page

Dort gibt es eine Sektion mit Code-Samples. Leider noch keine Delphi-Samples.

Gruß
Bertram

Jens Hartmann 19. Jun 2010 17:20

AW: HTTPS / G-Server
 
Danke,

ich weiß. Aber leider wie du sagst, keins für Delphi. Ich habe es aber mittlerweile ganz gut am laufen.

Gruß Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 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