2016-06-14 7 views
1

Breif Beschreibung dessen, was ich erreichen möchte. Also arbeite ich mit Crestron Simpl + Software. Meine Aufgabe ist es, ein Modul für ein Tonmaskierungssystem namens QT Pro zu erstellen. Jetzt hat QT Pro eine API, wo Sie es über HTTP steuern können. Ich brauche eine Möglichkeit, eine Verbindung mit dem QT Pro über HTTP herzustellen (ich habe alles, was ich brauche, IP, Benutzername, Passwort).So senden Sie HTTP-Befehle über Port 80

Was ist das Problem? Ich habe gerade angefangen, mit dieser Sprache zu arbeiten. Leider gibt es nicht so viel Dokumentation, wie ich gerne hätte, sonst wäre ich nicht hier. Ich weiß, ich muss eine Socket-Verbindung über TCP an Port 80 erstellen. Ich weiß nur nicht, was ich durch es senden soll. Hier

ein Beispiel: http://username:[email protected]/cmd.htm?cmd=setOneZoneData&ZN=Value&mD=Value & mN = Wert & AUXA = Wert & auxB = Wert & autoR = Wert

Wenn ich diese in das Feld URL setzen waren, und füllen Sie ihn richtig. dann würde es die von mir angegebenen Werte ändern. Soll ich das Ganze schicken? Oder gleich nach cmd.htm? Oder soll ich etwas anderes senden? Ich möchte mich vom TCP/IP-Modul fernhalten, damit ich alles im selben Modul behalten kann.

Danke.

Antwort

0

Sie senden

GET /cmd.htm?cmd=setOneZoneData&ZN=Value&mD=Value&mN=Value&auxA=Value&auxB=Value&autoR=Value HTTP/1.1 
Host: address 
Connection: close 

(Ende mit ein paar neue Zeilen.)

Wenn Sie HTTP-Basic-Authentifizierung verwenden müssen, dann auch einen Header wie

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= 

, wo die gibberish ist die base64-codierte Version von username: password.

Aber sicherlich gibt es einen Mechanismus zum Öffnen von HTTP-Verbindungen bereits für Sie da? Blindes Werfen solcher Header und das Hoffen, dass die Antwort das ist, was Sie erwarten, ist nicht robust, um es milde auszudrücken.

Um zu sehen, was mit Ihren Anfragen und Antworten vor sich geht, ist ein großes Werkzeug netcat (oder telnet, was das betrifft.)

nc address 80 Sie auf Server address auf Port 80, dann fügen Sie Ihre HTTP-Anforderung verbinden :

GET /cmd.htm HTTP/1.1 
Host: address 
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= 
Connection: close 

und sehen, was kommt zurück. ETWAS sollte zurückkommen. (Denken Sie daran, mit zwei Zeilenumbrüchen zu beenden.)

Um zu sehen, welche Anforderungen Ihr Browser sendet, wenn Sie etwas tun, das funktioniert, können Sie so hören: nc -l -p 8080. Dann leiten Sie Ihren Browser zu localhost: 8080 mit dem Rest der URL wie zuvor, und Sie werden die Anfrage sehen, die gesendet wurde. (Dann können Sie zurück tippen, um zu sehen, wie der Browser die Antwort verarbeitet.)

+0

Es gibt Funktionen zum Öffnen einer Socket-Verbindung, der Rest liegt bei mir. Ich wünschte, es gäbe einen leichteren Weg. Das einzige Problem ist die Tatsache, dass ich die WWW-Authentifizierung benutzen muss. Ich habe versucht, den Header dafür zu verwenden. Aber keine Antwort vom QTPro. Das habe ich. GET /zonedata_1.htm HTTP/1.1 Host: 192.168.10.70 Autorisierung: Basic YWRtaW46c2VjcmV0 Verbindung: Schließen –

+0

@DanielB: Versuchen Sie netcat (oder Telnet) zu debuggen-Ich habe einige Informationen zu meiner Antwort hinzugefügt. – Kundor

+0

Ich habe mit wireshark den Verkehr beobachtet, um zu sehen, ob etwas zurückkommt. Aber ich bekomme vom QT Pro nicht einmal eine einzige Sache. Ich konnte einmal eine Antwort bekommen. Aber es ist ihm nicht gelungen, diesen Effekt nachzubilden. Danke für Ihre Hilfe übrigens. –