<<< Previous topic - Next topic >>> |
|
Author |
Message |
kdw
Joined: 05 May 2006 Posts: 1485
|
Posted: 09.08.2014, 07:09 Post subject: HTTP-Server in Python … |
|
|
Hallo Forum.
Mit der eSOM/3517-Python-Portierung lässt sich auch recht einfach ein HTTP-Server realisieren. Hierzu ein Beispiel:
Speichern Sie die folgenden Zeilen Python-Code auf dem PC in einer Datei mit dem Namen igw935-svr-sim.py.
Code: | import time
from BaseHTTPServer import BaseHTTPRequestHandler
Temision = 550.87
Tengine = 77.24
pres = 2.84
speed = 1500
gas = 334
Tfor = 69.09
Tback = 44.90
Tgen = 65.10
power = 63.50
Epower = 452383
CO2 = 56432
Tpower = 234755
class MyHandler(BaseHTTPRequestHandler):
def do_GET(s):
s.send_response(200)
s.send_header('Content-type', 'application/json')
s.end_headers()
s.wfile.write('{')
s.wfile.write('"Temison"' + ':' + str(Temision) + ',')
s.wfile.write('"Tengine"' + ':' + str(Tengine) + ',')
s.wfile.write('"pres"' + ':' + str(pres) + ',')
s.wfile.write('"speed"' + ':' + str(speed) + ',')
s.wfile.write('"gas"' + ':' + str(gas) + ',')
s.wfile.write('"Tfor"' + ':' + str(Tfor) + ',')
s.wfile.write('"Tback"' + ':' + str(Tback) + ',')
s.wfile.write('"Tgen"' + ':' + str(Tgen) + ',')
s.wfile.write('"power"' + ':' + str(power) + ',')
s.wfile.write('"Epower"' + ':' + str(Epower) + ',')
s.wfile.write('"CO2"' + ':' + str(CO2) + ',')
s.wfile.write('"Tpower"' + ':' + str(Tpower))
s.wfile.write('}')
if __name__ == '__main__':
from BaseHTTPServer import HTTPServer
server = HTTPServer(('', 8080), MyHandler)
print 'Starting server, use <Ctrl-C> to stop'
server.serve_forever()
|
Übertragen Sie diese Datei per FTP vom PC zum eSOM/3517 in das Verzeichnis /flash. Starten Sie dann dieses Python-Skript im Rahmen einer Telnet- bzw. SSH-Sitzung einfach durch die Eingabe:
Code: | cd /flash
python igw935-svr-sim.py |
Das ist schon alles. Sie können nun mit einem Browser oder einem anderen HTTP-Client auf den Server zugreifen. Beachten Sie bitte, dass der Server unter dem Port 8080 erreichbar ist.
Der HTTP-Server liefert für jeden GET-Request (die URI spielt keine Rolle) ein JSON-Objekt der Form:
Code: | {"Temison":550.87,
"Tengine":77.24,
"pres":2.84,
"speed":1500,
"gas":334,
"Tfor":69.09,
"Tback":44.9,
"Tgen":65.1,
"power":63.5,
"Epower":452383,
"CO2":56432,
"Tpower":234755} |
Die Datenelemente dieses JSON-Objekts entsprechen der auf einem IGW/935 vorinstallierten Demo-Anwendung für die FDE (Field Data Engine).
Gruß KDW |
|
Back to top |
|
|
kdw
Joined: 05 May 2006 Posts: 1485
|
Posted: 14.09.2014, 08:36 Post subject: Server-Template … |
|
|
Hallo Forum.
Das folgende Beispiel zeigt einen kleinen HTTP-Server, der per GET /?Tengine=Wert angesprochen werden muss. Der Query-String wird extrahiert und ‚Wert‘ an eine externe Funktion übergeben:
Code: | import urlparse
from BaseHTTPServer import BaseHTTPRequestHandler
def TengineHandler(value):
print 'Tengine is now ' + value
class MyHandler(BaseHTTPRequestHandler):
def do_GET(s):
parsed_path = urlparse.urlparse(s.path)
querystr = parsed_path.query.split('=')
if querystr[0] == 'Tengine' and len(querystr) == 2:
s.send_response(200)
TengineHandler(querystr[1])
else:
s.send_response(400)
s.end_headers()
if __name__ == '__main__':
from BaseHTTPServer import HTTPServer
server = HTTPServer(('', 8080), MyHandler)
print 'Starting server, use <Ctrl-C> to stop'
server.serve_forever()
|
Für den Test dieses Server sollte man cURL benutzen. Ein möglicher Aufruf wäre:
Code: | curl –v http://127.0.0.1:8080/?Tengine=1234 |
Weitere hilfreiche Informationen zum Python-BaseHTTPServer findet man auch unter: http://pymotw.com/2/BaseHTTPServer/
Gruß KDW |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|