O HTTPOUT é um ambiente de tempo de execução para arquivos Python. Ele permite que você execute seus scripts Python a partir de um URL da web, a saída print() vai para o navegador.
Esta é a maneira clássica de implantar seus scripts na web. Você só precisa colocar seus arquivos .py regulares e outros arquivos estáticos na raiz do documento e cada um será rotável na web. Não é necessário recarregar de servidor!
Ele fornece uma experiência nativa para executar seu script na web.
O httpout atribuirá todas as rota como /hello.py ou /index.py com o nome __main__ e executará seu arquivo correspondente como um módulo em um pool de threads. O patch de macaco é feito no nível do módulo, seqüestrando o __import__ .
Na perspectiva dos submódulos, o objeto __main__ aponta para o módulo principal como /hello.py , em vez de apontar para sys.modules['__main__'] ou o próprio servidor da web.
O HTTPOUT não executa um mecanismo de cache, como importações padrão ou com sys.modules para evitar conflitos com outros módulos / solicitações. Porque cada solicitação deve ter seu próprio espaço para nome.
Para simplificar, apenas o módulo principal é armazenado em cache (como objeto de código). O cache será válido durante o HTTP Keep-alive. Portanto, se você apenas alterar o script, não há necessidade de recarregar o processo do servidor, aguarde até que a conexão seja perdida.
Lembre -se de que isso pode não funcionar para executar scripts Python complexos, por exemplo, executando outros processos de servidor ou aplicativos multithread, pois cada rota não é um thread 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>' ) Coloque hello.py nos examples/ pasta e execute o servidor httpout com:
python3 -m httpout --port 8000 examples/
e seu hello.py pode ser acessado em http: // localhost: 8000/hello.py. Se você não deseja o sufixo .py no URL, pode criar uma pasta hello/ com index.py dentro.
Esta é uma visão geral de como visualizar métodos de solicitação e ler dados do formulário.
# 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 )Também pode ser escrito desta maneira:
# 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 ())Então você pode fazer:
curl -d foo=bar http://localhost:8000/form.py
O HTTPOUT foi projetado para ser divertido. Não é construído para os perfeccionistas. httpout tem:
print() são enviadas imediatamente linha por linha sem esperar o script terminar como um CGI típicoif-else e print() tornando seu script portátil para CLI e WebÉ importante observar que o HTTPOUT se concentra apenas na solicitação de segurança; Para garantir que o caminho da travessia através do URL nunca aconteça.
O HTTPOUT nunca validará o script que você escreve, você ainda pode acessar objetos como os , eval() , open() e até percorrer a raiz do documento. Portanto, este estágio é de sua responsabilidade.
Para sua informação, o PHP costumava ter algo chamado modo de segurança, mas era considerado arquitetonicamente incorreto , então eles o removeram.
O modo de segurança PHP é uma tentativa de resolver o problema de segurança do servidor compartilhado. É arquitetonicamente incorreto tentar resolver esse problema no nível do PHP, mas como as alternativas nos níveis de servidor da Web e SO não são muito realistas, muitas pessoas, especialmente os ISPs, usam o modo de segurança por enquanto.
MIT Licença