HTTPOUT ist eine Laufzeitumgebung für Python -Dateien. Sie können Ihre Python -Skripte aus einer Web -URL ausführen. Die Ausgabe print() geht an Ihren Browser.
Dies ist die klassische Möglichkeit, Ihre Skripte im Web bereitzustellen. Sie müssen nur Ihre regulären .py -Dateien sowie andere statische Dateien in das Dokument -Root einfügen, und jeder kann aus dem Web reibbar sein. Es ist kein Server -Nachladen erforderlich!
Es bietet eine native Erfahrung, um Ihr Skript aus dem Web auszuführen.
Httpout weist jede Route entweder wie /hello.py oder /index.py mit dem Namen __main__ zu und führt seine entsprechende Datei als Modul in einem Thread -Pool aus. Das Affenpaticken erfolgt auf der Modulebene, indem Sie das __import__ entführen.
In der Perspektive von Submodules zeigt das Objekt __main__ auf das Hauptmodul wie /hello.py , anstatt auf sys.modules['__main__'] oder auf den Webserver selbst zu verweisen.
HTTPOUT führt keinen Cache -Mechanismus wie Standardimporte oder mit Sys.modules aus, um Konflikte mit anderen Modulen / Anfragen zu vermeiden. Weil jede Anfrage einen eigenen Namespace haben muss.
Um es einfach zu halten, wird nur das Hauptmodul zwischengespeichert (als Codeobjekt). Der Cache ist während der HTTP-Keep-Alive gültig. Wenn Sie also nur das Skript ändern, müssen Sie den Serverprozess nicht neu laden, bis die Verbindung verloren geht.
Beachten Sie, dass dies möglicherweise nicht funktioniert, um komplexe Python -Skripte auszuführen, z. B. andere Serverprozesse oder Multithread -Anwendungen, da jede Route kein realer Haupt -Thread ist.
python3 -m pip install --upgrade httpout
# hello.py
import time
print ( '<pre>Hello...' )
time . sleep ( 1 )
print ( 'and' )
time . sleep ( 2 )
print ( 'Bye!</pre>' ) Setzen Sie hello.py in die examples/ den Ordner und führen Sie den HTTPOUT -Server mit: Aus:
python3 -m httpout --port 8000 examples/
Und auf Ihr hello.py kann unter http: // localhost: 8000/hello.py zugegriffen werden. Wenn Sie das .py -Suffix in der URL nicht möchten, können Sie stattdessen einen hello/ Ordner mit index.py innen erstellen.
Dies ist ein Überblick darüber, wie Sie Anforderungsmethoden anzeigen und Formulardaten lesen.
# form.py
import sys
from httpout import wait , request , response
method_str = request . environ [ 'REQUEST_METHOD' ]
method_bytes = request . method
if method_str != 'POST' :
response . set_status ( 405 , 'Method Not Allowed' )
print ( 'Method Not Allowed' )
sys . exit ()
# we can't use await outside the async context
# so wait() is used here because request.form() is a coroutine object
form_data = wait ( request . form ())
print ( method_str , method_bytes , form_data )Es kann auch so geschrieben werden:
# form.py
import sys
from httpout import run , request , response
method_str = request . environ [ 'REQUEST_METHOD' ]
method_bytes = request . method
if method_str != 'POST' :
response . set_status ( 405 , 'Method Not Allowed' )
print ( 'Method Not Allowed' )
sys . exit ()
async def main ():
# using await instead of wait()
form_data = await request . form ()
print ( method_str , method_bytes , form_data )
run ( main ())Dann können Sie:
curl -d foo=bar http://localhost:8000/form.py
HTTPOUT ist so konzipiert, dass er Spaß macht. Es ist nicht für Perfektionisten gebaut. httpout hat:
print() S wird sofort eine Linie per Linie gesendet, ohne darauf zu warten, dass das Skript wie ein typischer CGI beendet wirdif-else und print() Machen Sie Ihr Skript sowohl für CLI als auch für Web tragbarEs ist wichtig zu beachten, dass sich HTTPOUT nur auf die Sicherheit der Anfrage konzentriert. Um sicherzustellen, dass der Weg durch die URL durchquert wird, geschieht niemals.
HTTPOUT wird niemals das von Ihnen geschriebene Skript validieren. Sie können weiterhin auf Objekte wie os , eval() , open() zugreifen und sogar aus dem Dokumentrouch herausfahren. Diese Phase liegt also in Ihrer Verantwortung.
Zu Ihrer Information, PHP hatte früher einen sogenannten abgesicherten Modus, aber es wurde als architektonisch falsch angesehen, so dass sie es entfernt haben.
Der PHP-Sicherheitsmodus ist ein Versuch, das Sicherheitsproblem mit Shared-Server zu lösen. Es ist architektonisch falsch, dieses Problem auf PHP -Ebene zu lösen, aber da die Alternativen auf dem Webserver und der Betriebssystemniveaus nicht sehr realistisch sind, verwenden viele Menschen, insbesondere die ISPs, den abgesicherten Modus vorerst.
MIT -Lizenz