httpout은 파이썬 파일의 런타임 환경입니다. 웹 URL에서 Python 스크립트를 실행할 수 있으며 print() 출력은 브라우저로 이동합니다.
이것은 스크립트를 웹에 배포하는 전형적인 방법입니다. 문서 루트에 일반 .py 파일과 다른 정적 파일을 넣으면 웹에서 각각 라우팅 할 수 있습니다. 서버 리로드가 필요하지 않습니다!
웹에서 스크립트를 실행하기위한 기본 경험을 제공합니다.
httpout은 /hello.py 또는 /index.py 와 같은 모든 경로를 이름 __main__ 로 할당하고 해당 파일을 스레드 풀에서 모듈로 실행합니다. 원숭이 패치는 __import__ 납치하여 모듈 수준에서 수행됩니다.
서브 모듈 관점에서 __main__ 객체는 sys.modules['__main__'] 또는 웹 서버 자체를 가리키지 않고 /hello.py 와 같은 기본 모듈을 가리 킵니다.
httpout은 다른 모듈 / 요청과의 충돌을 피하기 위해 표준 가져 오기 또는 sys.modules와 같은 캐시 메커니즘을 수행하지 않습니다. 각 요청에는 자체 네임 스페이스가 있어야하므로
간단하게 유지하기 위해 기본 모듈 만 캐시됩니다 (코드 객체). 캐시는 HTTP Keep-Alive 중에 유효합니다. 따라서 스크립트를 변경하면 서버 프로세스를 다시로드 할 필요가 없으며 연결이 손실 될 때까지 기다리십시오.
이것은 복잡한 Python 스크립트를 실행하는 데 효과적이지 않을 수 있습니다. 예를 들어 각 경로가 실제 주 스레드가 아니기 때문에 다른 서버 프로세스 또는 멀티 스레드 애플리케이션을 실행하십시오.
python3 -m pip install --upgrade httpout
# hello.py
import time
print ( '<pre>Hello...' )
time . sleep ( 1 )
print ( 'and' )
time . sleep ( 2 )
print ( 'Bye!</pre>' ) hello.py examples/ 폴더에 넣은 다음 httpout 서버를 다음과 같이 실행하십시오.
python3 -m httpout --port 8000 examples/
그리고 hello.py 는 http : // localhost : 8000/hello.py에서 액세스 할 수 있습니다. URL에서 .py 접미사를 원하지 않으면 index.py 내부의 hello/ 폴더를 만들 수 있습니다.
이것은 요청 방법을보고 양식 데이터를 읽는 방법에 대한 개요입니다.
# 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 )이런 식으로 작성할 수도 있습니다.
# 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 ())그런 다음 할 수 있습니다 :
curl -d foo=bar http://localhost:8000/form.py
httpout은 재미 있도록 설계되었습니다. 완벽 주의자들을 위해 만들어지지 않았습니다. httpout은 다음과 같습니다.
print() S는 스크립트가 일반적인 CGI처럼 완료되기를 기다리지 않고 즉시 한 줄씩 전송됩니다.if-else 및 print() 만 CLI와 웹 모두에 대한 스크립트를 휴대용으로 만듭니다.httpout은 요청 보안에만 초점을 맞추는 것이 중요합니다. URL을 통한 경로가 가로지 않도록하는 것은 결코 일어나지 않습니다.
httpout은 쓰기 스크립트를 검증하지 않으며 os , eval() , open() 과 같은 개체에 액세스 할 수 있습니다. 그래서이 단계는 당신의 책임입니다.
FYI, PHP는 안전 모드라고 불리는 것을 가지고 있었지만 건축 적으로 부정확 한 것으로 간주되어 제거했습니다.
PHP 안전 모드는 공유 서버 보안 문제를 해결하려는 시도입니다. PHP 수준 에서이 문제를 해결하려고 시도하는 것은 건축 적으로 부정확하지만 웹 서버와 OS 레벨의 대안은 매우 사실적이지 않기 때문에 많은 사람들, 특히 ISP는 현재 안전 모드를 사용하기 때문입니다.
MIT 라이센스