RestConsole/de

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(Qt)
 
(23 intermediate revisions by one user not shown)
Line 1: Line 1:
{{Quicklinks|Download}}{{ReleaseInfo}}
+
{{Quicklinks|RestConsole}}{{ReleaseInfo}}
 
== Über ==
 
== Über ==
Die REST-Konsole macht Remote-Administration der verschiedenen Open Dienste möglich.
+
Die REST-Konsole macht eine Fernsteuerung über Rest-Console der verschiedenen Open Dienste möglich.
  
 
Die Schnittstelle ermöglicht Befehle an den Server und Abrufen von Befehlsausgabe zu senden. Senden und Empfangen von Daten über RESTful HTTP-Aufrufe erfolgen.
 
Die Schnittstelle ermöglicht Befehle an den Server und Abrufen von Befehlsausgabe zu senden. Senden und Empfangen von Daten über RESTful HTTP-Aufrufe erfolgen.
Line 9: Line 9:
 
Um das Protokoll effizienter zu gestalten, die Hilfefunktion zu machen wurde auf der Client-Seite geschoben. Anstatt jeden Tastendruck an den Server senden, werden nur validierte Befehlszeilen gesendet. Um dies möglich zu machen, sendet der Server eine Burst-on-Connect von Daten, die der Baum der erlaubten Befehle und deren Hilfeinformationen. Dies kann durch den Kunden verwendet werden, um die "Hilfe" Befehlsausgabe sowohl lokal als auch zu schaffen als Kommandozeilen-Hilfe interaktiv zur Verfügung stellen.
 
Um das Protokoll effizienter zu gestalten, die Hilfefunktion zu machen wurde auf der Client-Seite geschoben. Anstatt jeden Tastendruck an den Server senden, werden nur validierte Befehlszeilen gesendet. Um dies möglich zu machen, sendet der Server eine Burst-on-Connect von Daten, die der Baum der erlaubten Befehle und deren Hilfeinformationen. Dies kann durch den Kunden verwendet werden, um die "Hilfe" Befehlsausgabe sowohl lokal als auch zu schaffen als Kommandozeilen-Hilfe interaktiv zur Verfügung stellen.
  
Die Probe Konsolen-Client, OpenSim.ConsoleClient.exe, zeigt, wie das gemacht wird.  
+
Die Probe Konsolen-Client, OpenSim.ConsoleClient.exe, zeigt, wie das gemacht wird.
  
 
== Verwendung ==
 
== Verwendung ==
Line 21: Line 21:
  
 
== Syntax ==
 
== Syntax ==
Wir nehmen den Opensimulator Dienstleistungsadresse <nowiki>http://foo.bar:8002</nowiki> als Beispiel.
+
Wir nehmen die Opensimulator Dienstleistungsadresse <nowiki>http://MeinServer.de:8002</nowiki> als Beispiel.
 +
 
 +
Zunächst eine neue Sitzung starten, indem Sie eine HTTP-POST-Anforderung senden. <br />
 +
Benutzername und Passwort sollten die gleichen Einstellungen sein, <br />
 +
wie für <tt>ConsoleUser</tt> und <tt>ConsolePass</tt> im Abschnitt <tt>[Network]</tt> der OpenSim.ini.<br />
  
Zunächst eine neue Sitzung starten, indem Sie eine HTTP-POST-Anforderung senden. Benutzername und Passwort sollten Sie die Einstellungen für <tt>ConsoleUser</tt> und <tt>ConsolePass</tt> im Abschnitt <tt>[Network]</tt> der OpenSim.ini.<br />
 
 
Parameter: USER, PASS
 
Parameter: USER, PASS
  <nowiki>http://foo.bar:8002/StartSession/</nowiki>
+
  <nowiki>http://MeinServer.de:8002/StartSession/</nowiki>
 
Rückgabe: (XML) <ConsoleSession><SessionID></SessionID><Prompt></Prompt></ConsoleSession>
 
Rückgabe: (XML) <ConsoleSession><SessionID></SessionID><Prompt></Prompt></ConsoleSession>
  
Jetzt haben wir die SessionID, die verwendet werden können, um einen Befehl zu senden und Ausgang zu empfangen. Zuerst wird der Puffer Rückholung Konsole abrufen.<br />
+
Jetzt haben wir die SessionID, die wir verwenden können um einen Befehl zu senden und zu empfangen. <br />
 +
Zuerst wird der Puffer Rückholung Konsole abrufen.<br />
 
Parameter: keine
 
Parameter: keine
  <nowiki>http://foo.bar:8002/ReadResponses/<SessionID>/</nowiki>
+
  <nowiki>http://MeinServer.de:8002/ReadResponses/<SessionID>/</nowiki>
 
Rückgabe: (XML) <ConsoleSession><Line Number=x></Line></ConsoleSession><br />
 
Rückgabe: (XML) <ConsoleSession><Line Number=x></Line></ConsoleSession><br />
Die Antwort enthält alle Linien derzeit im Puffer. Nachfolgende Abrufe werden nur neue Zeilen abzurufen. Die Abruf wird für bis zu 30 Sekunden lang gedrückt, wenn es keine Daten gibt, dann einen Fehler zurück. Der Kunde wird voraussichtlich wieder (Polling), um zu versuchen.
 
  
Use the SessionID as ID parameter, and send a POST request again.<br />
+
Die Antwort enthält alle lines die derzeit im Puffer sind. <br />
Parameters: ID, COMMAND
+
Nachfolgende Abrufe werden nur neue Zeilen abzurufen. <br />
<nowiki>http://foo.bar:8002/SessionCommand/</nowiki>
+
Der Abruf wird für bis zu 30 Sekunden lang gehalten, wenn es keine Daten gibt, dann kommt ein Fehler zurück. <br />
Return: (XML) <ConsoleSession><Result></Result></ConsoleSession><br />
+
Der Client wird voraussichtlich wieder ein Polling versuchen.
If everything went well, the command should have been executed. Try another command.
+
  
When you want to close down the connection, send a POST request again.<br />
+
Verwenden Sie die Sitzungs-ID als Parameter, und senden Sie erneut eine POST-Anfrage.<br />
Parameters: ID
+
Parameter: ID, COMMAND
  <nowiki>http://foo.bar:8002/CloseSession/</nowiki>
+
  <nowiki>http://MeinServer.de:8002/SessionCommand/</nowiki>
Return: (XML) <ConsoleSession><Result></Result></ConsoleSession><br />
+
Rückgabe: (XML) <ConsoleSession><Result></Result></ConsoleSession><br />
The session is closed, and you have to log in again, when you want to send a command again.
+
Wenn alles gut gegangen ist, sollte der Befehl ausgeführt worden sind. Versuchen Sie einen anderen Befehl.
  
== Examples ==
+
Wenn Sie die Verbindung zu schließen möchten, senden Sie erneut eine POST-Anfrage.
 +
Parameter: ID
 +
<nowiki>http://MeinServer.de:8002/CloseSession/</nowiki>
 +
Rückgabe: (XML) <ConsoleSession><Result></Result></ConsoleSession><br />
 +
Die Sitzung ist geschlossen, und Sie müssen sich erneut anmelden, wenn Sie wollen, erneut einen Befehl zu senden.
 +
= Clients =
  
=== Python ===
+
== C# ==
  
#!/usr/bin/python
+
Ein C# Client ist in der Opensimulator Distribution enthalten. Es ist rudimentär und nicht auf die neuesten Protokollversionen aktualisiert.
  # This piece of code is published by thomax (txOh) (c) 2010 under the
+
 
  # Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)
+
== Qt ==
   
+
 
  import urllib, urllib2
+
Der [[OpenSimConsoleClient]] Qt 5 basierte Client gibt es bei https://github.com/MelanieT/OpenSimConsoleClient
  import xml.dom.minidom
+
 
+
=== Qt 5 basierte Programme/Binaries ===
class UserConsoleClient():
+
  Windows: http://opensimulator.org/downloads/ConsoleClient.zip
+
Mac: http://opensimulator.org/downloads/ConsoleClient.dmg
    def __init__(self, addr):
+
Linux: TBD
        self.addr = addr
+
 
        url = self.addr + 'StartSession/'
+
= Beispiele =
+
 
        params = urllib.urlencode({
+
== HINWEIS ==
             'USER': 'Test',         # REST username
+
 
             'PASS': 'secret'       # REST password
+
Einige der folgenden Beispiele beziehen sich auf eine ältere Version der Schnittstelle. Sie können zu einem gewissen Grad arbeiten, müssen aber überarbeitet werden.
         })
+
 
         data = urllib2.urlopen(url, params).read()
+
=== node.js ===
+
 
        dom = xml.dom.minidom.parseString(data)
+
<source lang="javascript">
         elem =  dom.getElementsByTagName('SessionID')
+
/*
        self.sessionid = elem[0].childNodes[0].nodeValue
+
| This piece of code is published by thomax (tx0h) (c) 2018 under the
+
  | Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)
    def close(self):
+
  |
         url = self.addr + 'CloseSession/'
+
  | I removed my previous python approach because blueman made a better
         params = urllib.urlencode({
+
  | version and it was outdated. Here is a node.js variant.
             'ID': self.sessionid
+
*/
        })
+
 
        print urllib2.urlopen(url, params).read()
+
const readline = require('readline');
+
var Client = require('node-rest-client').Client;
     def do_cmd(self, cmd):
+
var client = new Client();
        url = self.addr + '/SessionCommand/'
+
var session_id;
         params = urllib.urlencode({
+
var base_url = "http://127.0.0.1:9000";
             'ID': self.sessionid,
+
 
             'COMMAND': cmd
+
 
         })
+
// set http header
         print urllib2.urlopen(url, params).read()
+
var headers = {
+
    "Content-Type": "application/x-www-form-urlencoded",
     def read_buffer(self):
+
    "User-Agent": "nodejs-console/0.01"
        url = self.addr + 'ReadResponses/' + self.sessionid + '/'
+
};
        params = urllib.urlencode({
+
 
            'ID': self.sessionid
+
// open session
        })
+
function open_session() {
+
    var args = {
        print urllib2.urlopen(url, params).read()
+
        data: {
+
             "USER": "Test",
# set the base url to the REST console (with port)
+
             "PASS": 'secret'
console = UserConsoleClient('<nowiki>http://127.0.0.1:8300/</nowiki>')
+
         },
console.read_buffer()
+
         headers,
print 'quit with a "."'
+
    };
cmd = ""
+
 
while cmd != ".":
+
    client.post(base_url + "/StartSession/", args, function (data, response) {
     if cmd != "":
+
        session_id = data.ConsoleSession.SessionID;
        console.do_cmd(cmd)
+
        read_session_buffer();
        console.read_buffer()
+
    });
     cmd = raw_input("> ")
+
}
+
 
console.close()
+
// close session
 +
function close_session() {
 +
    args = {
 +
        data: { "ID": session_id },
 +
        headers
 +
    };
 +
 
 +
    client.post(base_url + "/CloseSession/", args, function (data, response) {
 +
         console.log("close_session: "+response);
 +
    });
 +
 
 +
    console.log('Have a great day!');
 +
    process.exit(0);
 +
}
 +
 
 +
// read all the lines from the console buffer and print them
 +
function read_session_buffer() {
 +
    args = {
 +
        data: { "ID": session_id },
 +
         headers
 +
    };
 +
 
 +
    client.post(base_url + "/ReadResponses/"+session_id+"/", args, function (data, response) {
 +
         if(data.ConsoleSession.Line) {
 +
             var i;
 +
            for(i=0; i < data.ConsoleSession.Line.length; i++) {
 +
                if(data.ConsoleSession.Line[i]._) {
 +
                    console.log(data.ConsoleSession.Line[i]._);
 +
                }
 +
            }
 +
            rl.prompt();
 +
        }
 +
     });
 +
}
 +
 
 +
// execute the command from the prompt
 +
function execute_cmd(cmd) {
 +
    args = {
 +
         data: {
 +
             "ID": session_id,
 +
             "COMMAND": cmd
 +
         },
 +
         headers
 +
    };
 +
 
 +
    client.post(base_url + "/SessionCommand/", args, function (data, response) {
 +
     });
 +
}
 +
 
 +
 
 +
// here we go.
 +
open_session();
 +
 
 +
// prepare readline
 +
const rl = readline.createInterface({
 +
    input: process.stdin,
 +
    output: process.stdout,
 +
    prompt: 'REST CONSOLE> '
 +
});
 +
rl.prompt();
 +
 
 +
// hunt for events
 +
rl.on('line', (line) => {
 +
    switch (line.trim()) {
 +
        case 'quit':
 +
            close_session();
 +
            break;
 +
        default:
 +
            if(line.length > 0) {
 +
                execute_cmd(line.trim());
 +
            }
 +
            break;
 +
    }
 +
     read_session_buffer();
 +
    rl.prompt();
 +
}).on('close', () => {
 +
     close_session();
 +
});
 +
</source>
  
 
=== Python (Updated) ===
 
=== Python (Updated) ===
Line 267: Line 352:
 
</html>
 
</html>
 
</pre>
 
</pre>
 +
 +
 +
=== Python Alt===
 +
<source lang="python">
 +
#!/usr/bin/python
 +
# This piece of code is published by thomax (txOh) (c) 2010 under the
 +
# Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)
 +
 +
import urllib, urllib2
 +
import xml.dom.minidom
 +
 +
class UserConsoleClient():
 +
 +
    def __init__(self, addr):
 +
        self.addr = addr
 +
        url = self.addr + 'StartSession/'
 +
 +
        params = urllib.urlencode({
 +
            'USER': 'Test',        # REST username
 +
            'PASS': 'secret'        # REST password
 +
        })
 +
        data = urllib2.urlopen(url, params).read()
 +
 +
        dom = xml.dom.minidom.parseString(data)
 +
        elem =  dom.getElementsByTagName('SessionID')
 +
        self.sessionid = elem[0].childNodes[0].nodeValue
 +
 +
    def close(self):
 +
        url = self.addr + 'CloseSession/'
 +
        params = urllib.urlencode({
 +
            'ID': self.sessionid
 +
        })
 +
        print urllib2.urlopen(url, params).read()
 +
 +
    def do_cmd(self, cmd):
 +
        url = self.addr + '/SessionCommand/'
 +
        params = urllib.urlencode({
 +
            'ID': self.sessionid,
 +
            'COMMAND': cmd
 +
        })
 +
        print urllib2.urlopen(url, params).read()
 +
 +
    def read_buffer(self):
 +
        url = self.addr + 'ReadResponses/' + self.sessionid + '/'
 +
        params = urllib.urlencode({
 +
            'ID': self.sessionid
 +
        })
 +
 +
        print urllib2.urlopen(url, params).read()
 +
 +
# set the base url to the REST console (with port)
 +
console = UserConsoleClient('<nowiki>http://127.0.0.1:8300/</nowiki>')
 +
console.read_buffer()
 +
print 'quit with a "."'
 +
cmd = ""
 +
while cmd != ".":
 +
    if cmd != "":
 +
        console.do_cmd(cmd)
 +
        console.read_buffer()
 +
    cmd = raw_input("> ")
 +
 +
console.close()
 +
</source>
 +
 +
[[Category:German Translations]]

Latest revision as of 08:55, 15 July 2018

Contents

[edit] Über

Die REST-Konsole macht eine Fernsteuerung über Rest-Console der verschiedenen Open Dienste möglich.

Die Schnittstelle ermöglicht Befehle an den Server und Abrufen von Befehlsausgabe zu senden. Senden und Empfangen von Daten über RESTful HTTP-Aufrufe erfolgen.

Während das Senden sehr einfach ist, wird nicht mit. Empfangen verwendet HTTP-Reverse, eine lange Umfrage zu einer CAPS URI durchführen.

Um das Protokoll effizienter zu gestalten, die Hilfefunktion zu machen wurde auf der Client-Seite geschoben. Anstatt jeden Tastendruck an den Server senden, werden nur validierte Befehlszeilen gesendet. Um dies möglich zu machen, sendet der Server eine Burst-on-Connect von Daten, die der Baum der erlaubten Befehle und deren Hilfeinformationen. Dies kann durch den Kunden verwendet werden, um die "Hilfe" Befehlsausgabe sowohl lokal als auch zu schaffen als Kommandozeilen-Hilfe interaktiv zur Verfügung stellen.

Die Probe Konsolen-Client, OpenSim.ConsoleClient.exe, zeigt, wie das gemacht wird.

[edit] Verwendung

Um die Remote - Konsole zu verwenden, starten Sie Open Dienste mit dem Parameter -console rest.

Beispiel für Robust-Server im Grid-Modus:

mono Robust.exe -console rest

Beispiel für Simulatoren (sowohl im Grid und Standalone-Modus):

mono OpenSim.exe -console rest

[edit] Syntax

Wir nehmen die Opensimulator Dienstleistungsadresse http://MeinServer.de:8002 als Beispiel.

Zunächst eine neue Sitzung starten, indem Sie eine HTTP-POST-Anforderung senden.
Benutzername und Passwort sollten die gleichen Einstellungen sein,
wie für ConsoleUser und ConsolePass im Abschnitt [Network] der OpenSim.ini.

Parameter: USER, PASS

http://MeinServer.de:8002/StartSession/

Rückgabe: (XML) <ConsoleSession><SessionID></SessionID><Prompt></Prompt></ConsoleSession>

Jetzt haben wir die SessionID, die wir verwenden können um einen Befehl zu senden und zu empfangen.
Zuerst wird der Puffer Rückholung Konsole abrufen.
Parameter: keine

http://MeinServer.de:8002/ReadResponses/<SessionID>/

Rückgabe: (XML) <ConsoleSession><Line Number=x></Line></ConsoleSession>

Die Antwort enthält alle lines die derzeit im Puffer sind.
Nachfolgende Abrufe werden nur neue Zeilen abzurufen.
Der Abruf wird für bis zu 30 Sekunden lang gehalten, wenn es keine Daten gibt, dann kommt ein Fehler zurück.
Der Client wird voraussichtlich wieder ein Polling versuchen.

Verwenden Sie die Sitzungs-ID als Parameter, und senden Sie erneut eine POST-Anfrage.
Parameter: ID, COMMAND

http://MeinServer.de:8002/SessionCommand/

Rückgabe: (XML) <ConsoleSession><Result></Result></ConsoleSession>
Wenn alles gut gegangen ist, sollte der Befehl ausgeführt worden sind. Versuchen Sie einen anderen Befehl.

Wenn Sie die Verbindung zu schließen möchten, senden Sie erneut eine POST-Anfrage. Parameter: ID

http://MeinServer.de:8002/CloseSession/

Rückgabe: (XML) <ConsoleSession><Result></Result></ConsoleSession>
Die Sitzung ist geschlossen, und Sie müssen sich erneut anmelden, wenn Sie wollen, erneut einen Befehl zu senden.

[edit] Clients

[edit] C#

Ein C# Client ist in der Opensimulator Distribution enthalten. Es ist rudimentär und nicht auf die neuesten Protokollversionen aktualisiert.

[edit] Qt

Der OpenSimConsoleClient Qt 5 basierte Client gibt es bei https://github.com/MelanieT/OpenSimConsoleClient

[edit] Qt 5 basierte Programme/Binaries

Windows: http://opensimulator.org/downloads/ConsoleClient.zip
Mac: http://opensimulator.org/downloads/ConsoleClient.dmg
Linux: TBD

[edit] Beispiele

[edit] HINWEIS

Einige der folgenden Beispiele beziehen sich auf eine ältere Version der Schnittstelle. Sie können zu einem gewissen Grad arbeiten, müssen aber überarbeitet werden.

[edit] node.js

/*
 | This piece of code is published by thomax (tx0h) (c) 2018 under the
 | Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)
 |
 | I removed my previous python approach because blueman made a better
 | version and it was outdated. Here is a node.js variant.
*/
 
const readline = require('readline');
var Client = require('node-rest-client').Client;
var client = new Client();
var session_id;
var base_url = "http://127.0.0.1:9000";
 
 
// set http header
var headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "User-Agent": "nodejs-console/0.01"
};
 
// open session
function open_session() {
    var args = {
        data: {
            "USER": "Test",
            "PASS": 'secret'
        },
        headers,
    };
 
    client.post(base_url + "/StartSession/", args, function (data, response) {
        session_id = data.ConsoleSession.SessionID;
        read_session_buffer();
    });
}
 
// close session
function close_session() {
    args = {
        data: { "ID": session_id },
        headers
    };
 
    client.post(base_url + "/CloseSession/", args, function (data, response) {
        console.log("close_session: "+response);
    });
 
    console.log('Have a great day!');
    process.exit(0);
}
 
// read all the lines from the console buffer and print them
function read_session_buffer() {
    args = {
        data: { "ID": session_id },
        headers
    };
 
    client.post(base_url + "/ReadResponses/"+session_id+"/", args, function (data, response) {
        if(data.ConsoleSession.Line) {
            var i;
            for(i=0; i < data.ConsoleSession.Line.length; i++) {
                if(data.ConsoleSession.Line[i]._) {
                    console.log(data.ConsoleSession.Line[i]._);
                }
            }
            rl.prompt();
        }
    });
}
 
// execute the command from the prompt
function execute_cmd(cmd) {
    args = {
        data: {
            "ID": session_id,
            "COMMAND": cmd
        },
        headers
    };
 
    client.post(base_url + "/SessionCommand/", args, function (data, response) {
    });
}
 
 
// here we go.
open_session();
 
// prepare readline
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: 'REST CONSOLE> '
});
rl.prompt();
 
// hunt for events
rl.on('line', (line) => {
    switch (line.trim()) {
        case 'quit':
            close_session();
            break;
        default:
            if(line.length > 0) {
                execute_cmd(line.trim());
            }
            break;
    }
    read_session_buffer();
    rl.prompt();
}).on('close', () => {
    close_session();
});

[edit] Python (Updated)

#!/usr/bin/python
# This piece of code is published by thomax (txOh) (c) 2010 under the
# Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)
# Modifications (c) 2013 BlueWall
 
import urllib, urllib2
import xml.dom.minidom
 
class UserConsoleClient():
 
   def __init__(self, addr):
       self.addr = addr
       url = self.addr + 'StartSession/'
 
       params = urllib.urlencode({
           'USER': 'username',       # REST username
           'PASS': 'userpass'        # REST password
       })
       data = urllib2.urlopen(url, params).read()
       print data
 
       dom = xml.dom.minidom.parseString(data)
       elem =  dom.getElementsByTagName('SessionID')
       self.sessionid = elem[0].childNodes[0].nodeValue
       elem = dom.getElementsByTagName('Prompt')
       self.prompt = elem[0].childNodes[0].nodeValue + '# '
 
   def close(self):
       url = self.addr + 'CloseSession/'
       params = urllib.urlencode({
           'ID': self.sessionid
       })
       print urllib2.urlopen(url, params).read()
 
   def do_cmd(self, cmd):
       url = self.addr + 'SessionCommand/'
       params = urllib.urlencode({
           'ID': self.sessionid,
           'COMMAND': cmd
       })
       data = urllib2.urlopen(url, params).read()
       dom = xml.dom.minidom.parseString(data)
       elem =  dom.getElementsByTagName('Result')
       return elem[0].childNodes[0].nodeValue
 
   def read_buffer(self):
       url = self.addr + 'ReadResponses/' + self.sessionid + '/'
       params = urllib.urlencode({
           'ID': self.sessionid
       })
 
       # print urllib2.urlopen(url, params).read()
 
       result = urllib2.urlopen(url, params).read()
       dom = xml.dom.minidom.parseString(result)
 
       elem =  dom.getElementsByTagName('Line')
       for line in elem:
         x0 = line.childNodes[0].nodeValue
         x1 = str.replace(str(x0),':','~',2)
         x2 = x1.split("~")
         for lv in x2[2:]:
           if not '+++' in lv:
             print lv
 
# set the base url to the REST console (with port)
console = UserConsoleClient('http://example.com:8003/')
console.read_buffer()
print 'quit with a "."'
cmd = ""
while cmd != ".":
   if cmd != "":
     if 'OK' in console.do_cmd(cmd):
       console.read_buffer()
   cmd = raw_input("%s " % console.prompt)
 
console.close()

[edit] JavaScript/HTML

<html>
  <head>

    <!-- This JavaScript code is published by Marck (c) 2010 under a -->
    <!-- Creative Commons Attribution 3.0 Germany License            -->
    <!-- http://creativecommons.org/licenses/by/3.0/de/              -->
    <script type="text/javascript">

      var sessionId;
      var hostUrl;

      function StartSession(url, user, password) {
        hostUrl = url;
        var response = SendRequest("/StartSession/", "USER=" + user + "&PASS=" + password);
        sessionId = response.getElementsByTagName("SessionID")[0].firstChild.nodeValue;
      };

      function ReadResponses() {
        var response = this.SendRequest("/ReadResponses/" + sessionId + "/", '');
        var lines = response.getElementsByTagName("Line");
        for (var i = 0; i < lines.length; ++i) {
          var element = document.createElement("div");
          element.appendChild(document.createTextNode(lines[i].firstChild.nodeValue));
          document.getElementById("output").appendChild(element);
        };
        document.getElementById("output").scrollTop = document.getElementById("output").scrollHeight;
      };

      function Command(cmd) {
        void SendRequest("/SessionCommand/", "ID=" + sessionId + "&COMMAND=" + cmd);
      };

      function CloseSession() {
        void SendRequest("/CloseSession/", "ID=" + sessionId);
      };

      function SendRequest(path, data) {
        var request = new XMLHttpRequest();
        request.open("POST", hostUrl + path, false);
        request.send(data);
        return request.responseXML;
      };

      window.onunload = CloseSession;

    </script>
  </head>
  <body>

    <form action="#" onsubmit="
        StartSession(this.address.value, this.user.value, this.password.value);
        ReadResponses();
        return false">
      <input name="address" type="text" value="http://localhost:9000" />
      <input name="user" type="text" value="ConsoleUser" />
      <input name="password" type="text" value="ConsolePass" />
      <input type="submit" value="Login" />
    </form>

    <div id="output" style="height:15em; border:thin solid; overflow:auto;"></div>

    <form action="#" onsubmit="
        Command(this.command.value);
        ReadResponses();
        return false">
      <input type="text" name="command" value="Enter command here" size="40"/>
      <input type="submit" value="Send Command" />
    </form>

  </body>
</html>


[edit] Python Alt

#!/usr/bin/python
 # This piece of code is published by thomax (txOh) (c) 2010 under the
 # Artistic License 1.0 (http://www.perlfoundation.org/artistic_license_1_0)
 
 import urllib, urllib2
 import xml.dom.minidom
 
 class UserConsoleClient():
 
    def __init__(self, addr):
        self.addr = addr
        url = self.addr + 'StartSession/'
 
        params = urllib.urlencode({
            'USER': 'Test',         # REST username
            'PASS': 'secret'        # REST password
        })
        data = urllib2.urlopen(url, params).read()
 
        dom = xml.dom.minidom.parseString(data)
        elem =  dom.getElementsByTagName('SessionID')
        self.sessionid = elem[0].childNodes[0].nodeValue
 
    def close(self):
        url = self.addr + 'CloseSession/'
        params = urllib.urlencode({
            'ID': self.sessionid
        })
        print urllib2.urlopen(url, params).read()
 
    def do_cmd(self, cmd):
        url = self.addr + '/SessionCommand/'
        params = urllib.urlencode({
            'ID': self.sessionid,
            'COMMAND': cmd
        })
        print urllib2.urlopen(url, params).read()
 
    def read_buffer(self):
        url = self.addr + 'ReadResponses/' + self.sessionid + '/'
        params = urllib.urlencode({
            'ID': self.sessionid
        })
 
        print urllib2.urlopen(url, params).read()
 
 # set the base url to the REST console (with port)
 console = UserConsoleClient('<nowiki>http://127.0.0.1:8300/</nowiki>')
 console.read_buffer()
 print 'quit with a "."'
 cmd = ""
 while cmd != ".":
    if cmd != "":
        console.do_cmd(cmd)
        console.read_buffer()
    cmd = raw_input("> ")
 
 console.close()
Personal tools
General
About This Wiki