HSL 2.0-Framework  1.9
Beschreibung des Frameworks
Öffentliche Methoden | Aufstellung aller Elemente
hsl20_2_http_server.hsl20_2_http_server.Server Klassenreferenz

Alle Methoden des HTTP-Servers. Mehr ...

Öffentliche Methoden

def __init__ (self, framework, context_map)
 Konstruktor. Mehr ...
 
def set_authentication (self, user=None, pw=None, digest=False)
 Setzt die HTTP-Authentifizierung: Mehr ...
 
def set_address (self, ip, port)
 Setzt die IP-Adresse und den IP-Port. Mehr ...
 
def set_error_callback (self, callback)
 Setzt eine Callback-Methode für den Fehlerfall. Mehr ...
 
def set_max_post_size (self, size)
 Setzt die zulässige Größe des Body für POST/PUT-Aufrufe. Mehr ...
 
def set_logger (self, logger)
 Weist dem Server eine hsl20_2.hsl20_2.Logger Instanz zu. Mehr ...
 
def start_server (self)
 Startet den Server. Mehr ...
 
def register_uri (self, method, path, callback)
 Registriert eine URI am Server. Mehr ...
 
def set_server_name (self, name)
 Setzt den Server-Name. Mehr ...
 

Ausführliche Beschreibung

Alle Methoden des HTTP-Servers.

Veraltet:
Diese Klasse sollte nicht mehr eingesetzt werden. In den Beispielen wird gezeigt, wie sie durch Standardmodule von Python ersetzt werden kann.

Bietet einen Server-Dienst zur Kommunikation per HTTP.

Wurde der HTTP-Server vom Framework erzeugt und an eine IP und einen Port gebunden, kann dieser gestartet werden.
Erfolgen nun Aufrufe durch einen Client, gibt es zwei Möglichkeiten:

Nach Abarbeitung der jeweiligen Callback-Methode sendet der Server die erzeugte Antwort an die Gegenstelle. Wird im response-Objekt kein Statuscode gesetzt, antwortet der Server mit Statuscode 501.

Zu beachten
Die Klasse arbeitet asynchron. Keine der angebotenen Methoden blockiert.

HTTP-Request-Methoden

Bei der Registrierung einer URI können direkt eine oder mehrere HTTP-Methoden (per logischem ODER, z.B. hsl20_2_http_server.GET|hsl20_2_http_server.PUT) definiert werden, alternativ kann man auch hsl20_2_http_server.ALL zuweisen, dann wird die Callback-Methode bei jeder Methode aufgerufen. Der HTTP-Server bietet direkte Unterstützung für die folgenden Methoden:

Bei den Methoden POST und PUT wird ein Body-Element im Request unterstützt, hierfür muss im Header das Feld "Content-length" gesetzt sein. Sollte der Client die maximal zulässige Größe überschreiten, wird die Verbindung durch den Server getrennt.
Siehe auch hsl20_2_http_server.Server::set_max_post_size

Timeouts

Folgende Timeouts, bei deren Eintreten die Verbindung getrennt wird, sind zu beachten:

Authentifizierung

Es besteht die Möglichkeit, die Zugriffe auf den Server mit Benutzer/Passwort zu sichern. Über die Methode hsl20_2_http_server.Server.set_authentication kann die Authentifizierung aktiviert und deaktiviert werden. Zur Übermittlung der Benutzerdaten stehen folgende zwei Varianten zur Verfügung:

HA1 = MD5(BENUTZERNAME + ":" + REALM + ":" + PASSWORT) HA2 = MD5(UPPERCASE(HTTP_METHODE) + ":" + URI) RESULT = MD5(HA1 + ":" + NONCE_SERVER + ":" + NONCE_COUNTER + ":" + NONCE_CLIENT + ":auth:" + HA2)

Zu beachten
Es wird nur ein Benutzer/Passwort unterstützt.
Wird die Authentifizierung aktiviert, betrifft dies alle Zugriffe (Pfade) auf den Server.

Code-Beispiel

Die Verwendung dieser Klasse anhand eines kurzen Quellcode-Ausschnitts:

1 class mein_demo_modul(hsl20.BaseModule):
2 
3  ...
4 
5  def start_my_server(self):
6  if self.server == None:
7  self.server = self.FRAMEWORK.create_http_server()
8  self.server.set_address("", 8080)
9  self.server.set_authentication("user", "pw", 1)
10  self.server.register_uri(hsl20_2_http_server.GET, "/", self.on_index_page)
11  self.server.start_server()
12 
13  def on_index_page(self, request, response):
14  if request.get_method() == "GET":
15  response.set_status_code(200)
16  response.set_header("Content-type", "text/html")
17  response.set_body("<html><body>Hello World!</body></html>")

Beschreibung der Konstruktoren und Destruktoren

def hsl20_2_http_server.hsl20_2_http_server.Server.__init__ (   self,
  framework,
  context_map 
)

Konstruktor.

Warnung
Diese Klasse sollte nicht direkt instanziert werden.

Dokumentation der Elementfunktionen

def hsl20_2_http_server.hsl20_2_http_server.Server.register_uri (   self,
  method,
  path,
  callback 
)

Registriert eine URI am Server.

Wird diese URI von einem Client aufgerufen, wird das übergebene Callback ausgeführt.

Parameter
methodint
HTTP-Abrufmethoden. Es werden per ODER mehrere Optionen pro URI unterstützt. Es stehen folgende Konstanten zur Verfügung:
  • hsl20.framework.http_server.GET
  • hsl20.framework.http_server.POST
  • hsl20.framework.http_server.PUT
  • hsl20.framework.http_server.DELETE
  • hsl20.framework.http_server.ALL
pathstring
Pfad (z.B.: /index)
callbackfunction
Callback. Die hier übergebene Methode benötigt folgende Parameter:
def hsl20_2_http_server.hsl20_2_http_server.Server.set_address (   self,
  ip,
  port 
)

Setzt die IP-Adresse und den IP-Port.

Parameter
ipstring
IP-Adresse, an die der Server gebunden wird. Ein Leerstring bindet den Server an alle Netzwerk-Adressen des HS/FS.
portint
IP-Port, unter dem der Server erreichbar ist.
def hsl20_2_http_server.hsl20_2_http_server.Server.set_authentication (   self,
  user = None,
  pw = None,
  digest = False 
)

Setzt die HTTP-Authentifizierung:

  • Werden beide Parameter übergeben, wird die HTTP-Authentifizierung aktiviert, ansonsten wird sie deaktiviert.

Die Authentifizierung zählt für alle registrierten URIs.

Parameter
userstring
Benutzer
pwstring
Passwort
digestbool
Optional. Wenn TRUE wird als Authenifizierungsmechanismus "Digest Access Authentication" verwendet, ansonsten "Basic Authentication".
Änderungen V1.9:
Parameter pw wird in der Doku nun korrekt angegeben
def hsl20_2_http_server.hsl20_2_http_server.Server.set_error_callback (   self,
  callback 
)

Setzt eine Callback-Methode für den Fehlerfall.

Wird aufgerufen, wenn der Client eine nicht mit register_uri registrierte URL aufruft. Wird vom HTTP-Server nach Beenden dieser Methode ausgewertet.

Parameter
callbackfunction
Die Callback-Methode benötigt folgende Parameter:
  • errorcode int
    Fehlercode, der den aufgetretenen Fehler beschreibt.
  • request string
    HTTP-Request-Objekt, das alle Informationen bezüglich des HTTP-Request zur Verfügung stellt. Wird vom HTTP-Server erzeugt.
  • response string
    HTTP-Response-Objekt, das alle Informationen bezüglich des HTTP-Response enthalten muss.
def hsl20_2_http_server.hsl20_2_http_server.Server.set_logger (   self,
  logger 
)

Weist dem Server eine hsl20_2.hsl20_2.Logger Instanz zu.

Parameter
loggerhsl20_2.Logger
Logger-Objekt
def hsl20_2_http_server.hsl20_2_http_server.Server.set_max_post_size (   self,
  size 
)

Setzt die zulässige Größe des Body für POST/PUT-Aufrufe.

Wird der Wert überschritten, wird der Aufruf abgebrochen.

Standardwert: 1.000.000 Byte
Zulässiger Höchstwert (MAXWERT): 10.000.000 Byte

Parameter
sizeint
Größe in Byte. Ist size > MAXWERT wird size = MAXWERT gesetzt!
def hsl20_2_http_server.hsl20_2_http_server.Server.set_server_name (   self,
  name 
)

Setzt den Server-Name.

Wenn gesetzt, wird dieser Wert bei einem HTTP-Request als Standard-Wert für das Feld 'Server' verwendet. Der hier gesetzte Wert kann mit response.set_header überschrieben werden. Wenn kein Wert per set_server_name angegeben wird und kein Wert per response.set_header angegeben wird, wird der Context als Server-Name übermittelt.

Parameter
namestring
Neuer Server-Name
def hsl20_2_http_server.hsl20_2_http_server.Server.start_server (   self)

Startet den Server.

Ausnahmebehandlung
AttributeErrorWird ausgelöst, wenn keine gültige Adresse angegeben ist.

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei: