HTTPOUT adalah lingkungan runtime untuk file Python. Ini memungkinkan Anda untuk menjalankan skrip python Anda dari URL web, output print() masuk ke browser Anda.
Ini adalah cara klasik untuk menggunakan skrip Anda ke web. Anda hanya perlu meletakkan file .py reguler Anda serta file statis lainnya di root dokumen dan masing -masing akan dapat dirutekan dari web. Tidak diperlukan pemisahan server!
Ini memberikan pengalaman asli untuk menjalankan skrip Anda dari web.
httpout akan menetapkan setiap rute baik seperti /hello.py atau /index.py dengan nama __main__ dan menjalankan file yang sesuai sebagai modul dalam kumpulan utas. Penambalan monyet dilakukan pada tingkat modul dengan membajak __import__ .
Dalam perspektif submodules, objek __main__ menunjuk ke modul utama seperti /hello.py , daripada menunjuk ke sys.modules['__main__'] atau server web itu sendiri.
HTTPOUT tidak melakukan mekanisme cache seperti impor standar atau dengan sys.modules untuk menghindari konflik dengan modul / permintaan lain. Karena setiap permintaan harus memiliki namespace sendiri.
Agar tetap sederhana, hanya modul utama yang di -cache (sebagai objek kode). Cache akan valid selama HTTP Keep-Alive. Jadi, jika Anda hanya mengubah skrip, tidak perlu memuat ulang proses server, tunggu saja sampai koneksi hilang.
Perlu diingat ini mungkin tidak berfungsi untuk menjalankan skrip Python yang kompleks, misalnya menjalankan proses server lain atau aplikasi multithreaded karena setiap rute bukan utas utama yang sebenarnya.
python3 -m pip install --upgrade httpout
# hello.py
import time
print ( '<pre>Hello...' )
time . sleep ( 1 )
print ( 'and' )
time . sleep ( 2 )
print ( 'Bye!</pre>' ) Masukkan hello.py di examples/ folder, lalu jalankan server httpout dengan:
python3 -m httpout --port 8000 examples/
Dan hello.py Anda dapat diakses di http: // localhost: 8000/hello.py. Jika Anda tidak ingin sufiks .py di URL, Anda dapat membuat hello/ folder dengan index.py di dalamnya.
Ini adalah gambaran tentang cara melihat metode permintaan dan membaca data formulir.
# 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 )Ini juga dapat ditulis dengan cara ini:
# 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 ())Maka Anda bisa melakukannya:
curl -d foo=bar http://localhost:8000/form.py
httpout dirancang untuk menjadi menyenangkan. Itu tidak dibangun untuk perfeksionis. httpout memiliki:
print() dikirim langsung baris demi baris tanpa menunggu skrip selesai seperti CGI yang khasif-else dan print() Membuat skrip Anda portabel untuk CLI dan WebPenting untuk dicatat bahwa httpout hanya berfokus pada keamanan permintaan; untuk memastikan jalur traversal melalui URL tidak pernah terjadi.
httpout tidak akan pernah memvalidasi skrip yang Anda tulis, Anda masih dapat mengakses objek seperti os , eval() , open() , bahkan traversal di luar akar dokumen. Jadi tahap ini adalah tanggung jawab Anda.
FYI, PHP dulu memiliki sesuatu yang disebut Safe Mode, tetapi itu dianggap salah secara arsitektur , sehingga mereka menghapusnya.
PHP Safe Mode adalah upaya untuk menyelesaikan masalah keamanan server bersama. Secara arsitektur tidak benar untuk mencoba menyelesaikan masalah ini di level PHP, tetapi karena alternatif di server web dan level OS tidak terlalu realistis, banyak orang, terutama ISP, menggunakan mode aman untuk saat ini.
Lisensi MIT