Show pageOld revisionsBacklinksExport to PDFBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== CGI ====== Für schnellen Zugriff auf die [[commandinterface|Kommandoschnittstelle]] mit einem Browser stellt der Netzer eine CGI-Version zur Verfügung. ===== Verwendung ===== Die CGI-Version wird genutzt, indem man die Seite ''action.cgi'' des Netzers mit einem HTTP GET aufruft. Dabei wird der gewünschte Befehl als Schlüssel und der gewünschte Wert als Schlüssel-Wert-Paar im [[wpde>Query_String|Query String]] des Aufrufs angegeben. Für den Netzer mit der Kennung ''mein_netzer'', den Befehl 'a' und den Wert '0' lautete der Aufruf: <code>http://mein-netzer.local/action.cgi?a=0</code> Im einfachsten Fall wird diese URL direkt in die Adressleiste des Browsers eingeben. Die HTTP-Response hat den Content-Type ''application/json'' und enthält die Antwort des Netzers als JSON-Objekt. Pro Aufruf kann nur ein Kommandoschnittstellenbefehl ausgeführt werden. Werden mehrere Kommandoschnittstellenbefehle angegeben, wird nur der erste Befehl ausgeführt, alle anderen werden ignoriert. Zusätzlich zu dem Kommandoschnittstellenbefehl kann noch ein CGI-spezifischer Befehl angegeben werden, der ebenfalls ausgeführt wird. Auch hier gilt, dass pro Aufruf nur ein CGI-spezifischer Befehl ausgeführt wird. Werden mehrere CGI-spezifische Befehle angegeben, wird nur der erste ausgeführt. <note important>Da der Netzer im Query String stets Schlüssel-Wert-Paare erwartet, kann es bei Lesebefehlen zu Problemens kommen, da diese nur aus einem Schlüssel (dem Befehl) ohne Wert bestehen. Dies geschieht immer dann, wenn mehrere Befehle in einem CGI-Aufruf übergeben werden. Es wird grundsätzlich nur der erste gefundene Befehl ausgeführt, allerdings kann beim Versuch mehrere Befehle in einem Aufruf auszuführen aus einem Lese- ein Schreibbefehl werden: <WRAP center round box 60%> Die beiden getrennten Befehle ''a'' und ''b'' in <code>http://mein-netzer.local/action.cgi?a&b</code> werden vom Netzer wie ein Befehl ''a=b'' interpretiert. Äquivalent zu: <code>http://mein-netzer.local/action.cgi?a=b</code> </WRAP> Problematisch ist dieser Umstand bei der Kombination von Kommandoschnittstelle und CGI-spezifischen Befehlen. In diesen Fällen können zwei Befehle aus dem Query String ausgeführt werden, jeweils ein Befehl der Kommandoschnittstelle und ein CGI-spezifischer. <WRAP center round box 60%> Der Lesebefehl ''a'' und der Redirect ''zr=meine_seite'' <code>http://mein-netzer.local/action.cgi?a&zr=meine_seite</code> werden als Schreibbefehl ''a=zr'' und Lesebefehl ''meine_seite'' interpretiert. <code>http://mein-netzer.local/action.cgi?a=zr&meine_seite</code> ''meine_seite'' wird nicht ausgeführt, da es der zweite Befehl der Kommandoschnittstelle wäre. </WRAP> Das kann zu Fehlerbildern führen, die auf den ersten Blick sehr verwirrend sind. <WRAP center round box 60%> Der Aufruf <code>http://mein-netzer.local/action.cgi?a&zr=zr</code> wird interpretiert wie <code>http://mein-netzer.local/action.cgi?a=zr&zr</code> </WRAP> Also wie der Schreibbefehl ''a=zr'' und der Redirect ''zr''. Dabei wird als Ziel des Redirects ein leerer String angenommen. **Daher gilt:** Wenn mehrere Befehle in einem Aufruf übergeben werden sollen, darf nur der letzte die Form eines Lesebefehls haben (nur ein Befehl, kein Wert). Alle anderen Befehle müssen die Form von Schreibbefehlen haben (ein Befehl und ein Wert). Korrekt: <code>http://mein-netzer.local/action.cgi?zr=meine_seite&a</code> Falsch: <code>http://mein-netzer.local/action.cgi?a&zr=meine_seite</code> </note> ===== Spezifische Befehle ===== ==== Redirect ==== Der Befehl ''zr'' veranlasst einen Redirect auf die als Wert von ''zr'' angegebene Seite. Verwendet wird es vor allem in Kombination mit Schreibbefehlen der Kommandoschnittstelle. Durch diese Kombination kann man einen Schreibbefehl ausführen, ohne dass die Antwort des Netzers angezeigt wird. === Beispiel === <code>http://mein-netzer.local/action.cgi?a=1&zr=/</code> Dieser Aufruf würde den GPIO-Kanal ''a'' auf 1 setzen und danach die Startseite des Netzers anzeigen.