![]() |
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. ![]() 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. ![]() 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 |
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. |
Re: HTTPS / G-Server
So, jetzt habe ich nach langem suchen endlich gefunden, was überhaupt genau benötigt wird.
![]() 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 |
Re: HTTPS / G-Server
@Jens:
In diesem Fall sollte ein "einfaches":
Delphi-Quellcode:
Dir schon weiter helfen, oder ?
var sResponse : String;
sURL : String; begin sURL := 'www.xyz.de/blabla.cgi?paramater=usw'; sResponse := Idhttp1.Get(sUrl); end; Greetz Data |
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 |
Re: HTTPS / G-Server
Anhang vergessen? :zwinker:
|
Re: HTTPS / G-Server
Keiner eine Idee für ein Tutorial?
Gruß Jens |
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:
Kann mir da vieleicht jemand einen Tip geben, oder zumindest einen Bereich wo ich mich einlesen kann.
[url]http://127.0.0.1:8801/cgi-bin/gadgetapi?cmd=SetDisplay&device=101&contentsOfDisplay=MeinText[/url].....
Danke schon mal und Gruß Jens |
Re: HTTPS / G-Server
Code:
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.
[url]http://127.0.0.1:8801/cgi-bin/gadgetapi?cmd=SetDisplay&device=101&contentsOfDisplay=MeinText[/url].....
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 |
Re: HTTPS / G-Server
Danke mjustin,
werde ich gleich mal nach suchen. Gruß Jens |
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:
Gruß Jens
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; |
AW: HTTPS / G-Server
Delphi-Quellcode:
idhtpGServer.HandleRedirects := true;
|
AW: HTTPS / G-Server
Danke, das war´s.
Gruß Jens |
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 |
AW: HTTPS / G-Server
Hallo,
schau mal bitte bei Wikipedia nach: ![]() Demnach müsste es zwei Möglichkeiten geben: Leerzeichen durch + ersetzen oder Leerzeichen durch %20 ersetzen. |
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:
Gibt es irgendwo eine Übersicht der Sonderzeichen und deren Umwandlung.
StringReplace
Gruß Jens |
AW: HTTPS / G-Server
Hallo Jens,
Zitat:
Spar Dir das, binde einfach die Unit IdURL ein und nutze es so:
Delphi-Quellcode:
s := TIdURI.URLEncode(mystring);
Gruß, Assertor |
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 |
AW: HTTPS / G-Server
Hallo Jens,
Zitat:
Dann am besten Dein Space-Replace mit dem URLEncode() kombinieren. Das sollte gehen. Gruß, Assertor |
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 |
AW: HTTPS / G-Server
Hallo Jens,
Zitat:
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:
Ausgabe:
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;
Code:
Das "+" wird aber von Indy tatsächlich, bewußt nicht kodiert. Die Parametertrennung zu kodieren hatte früher den Benutzern zu viele Probleme gemacht.
http://127.0.0.1:8801/cgi-bin/gadgetapi?cmd=SetDisplay&device=101&contentsOfDisplay=MeinText%20abc%20+
Zu dem Bereich der gültigen Chars: Alles außerhalb US-ASCII muß kodiert werden (siehe ![]() Gruß, Assertor |
AW: HTTPS / G-Server
Zitat:
Danke übrigens für die Liste Gruß Jens |
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 |
AW: HTTPS / G-Server
Kein Problem,
trotzdem Danke. Vieleicht muss ich doch langsam mal überlegen umzusteigen. Gruß Jens |
AW: HTTPS / G-Server
Hallo,
vielleicht hilft es ein wenig: ![]() Dort gibt es eine Sektion mit Code-Samples. Leider noch keine Delphi-Samples. Gruß Bertram |
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 00:22 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 by Thomas Breitkreuz