Httpout es un entorno de tiempo de ejecución para archivos Python. Le permite ejecutar sus scripts de Python desde una URL web, la salida print() va a su navegador.
Esta es la forma clásica de implementar sus scripts en la web. Solo necesita colocar sus archivos .py regulares, así como otros archivos estáticos en la raíz del documento, y cada uno será enrutable desde la web. ¡No se requiere una recarga del servidor!
Proporciona una experiencia nativa para ejecutar su script desde la web.
Httpout asignará cada ruta como /hello.py o /index.py con el nombre __main__ y ejecuta su archivo correspondiente como un módulo en un grupo de subprocesos. El parche de mono se realiza a nivel de módulo secuestrando el __import__ .
En la perspectiva de los submódulos, el objeto __main__ apunta al módulo principal como /hello.py , en lugar de señalar sys.modules['__main__'] o el servidor web en sí.
httpout no realiza un mecanismo de caché como las importaciones estándar o con sys.modules para evitar conflictos con otros módulos / solicitudes. Porque cada solicitud debe tener su propio espacio de nombres.
Para mantenerlo simple, solo el módulo principal se almacena en caché (como objeto de código). El caché será válido durante HTTP Keep-Alive. Entonces, si solo cambia el script, no es necesario volver a cargar el proceso del servidor, solo espere hasta que se pierda la conexión.
Tenga en cuenta que esto puede no funcionar para ejecutar scripts de Python complejos, por ejemplo, ejecutar otros procesos de servidor o aplicaciones multiproceso, ya que cada ruta no es un hilo principal real.
python3 -m pip install --upgrade httpout
# hello.py
import time
print ( '<pre>Hello...' )
time . sleep ( 1 )
print ( 'and' )
time . sleep ( 2 )
print ( 'Bye!</pre>' ) Pon hello.py en los examples/ carpeta, luego ejecute el servidor httpout con:
python3 -m httpout --port 8000 examples/
y se puede acceder a su hello.py en http: // localhost: 8000/hello.py. Si no desea el sufijo .py en la URL, puede crear una carpeta hello/ con index.py adentro.
Esta es una descripción general de cómo ver los métodos de solicitud y leer datos de formulario.
# 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 )También se puede escribir de esta manera:
# 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 ())Entonces puedes hacer:
curl -d foo=bar http://localhost:8000/form.py
Httpout está diseñado para ser divertido. No está construido para perfeccionistas. httpout tiene:
print() s se envían inmediatamente en línea por línea sin esperar a que el script termine como un CGI típicoif-else e print() haciendo que su script sea portátil tanto para CLI como para webEs importante tener en cuenta que httpout solo se centra en la seguridad de la solicitud; Para garantizar que el recorrido de la ruta a través de la URL nunca ocurra.
httpout nunca validará el script que escribe, aún puede acceder a objetos como os , eval() , open() , incluso transversal fuera de la raíz del documento. Entonces esta etapa es tu responsabilidad.
Para su información, PHP solía tener algo llamado modo seguro, pero se consideraba arquitectónicamente incorrecto , por lo que lo eliminaron.
El modo Safe PHP es un intento de resolver el problema de seguridad del servidor compartido. Es arquitectónicamente incorrecto tratar de resolver este problema a nivel de PHP, pero dado que las alternativas en el servidor web y los niveles de SO no son muy realistas, muchas personas, especialmente las ISP, usan el modo seguro por ahora.
Licencia de MIT