파이썬

my_HTTPServer / python -m http.server 8888/ cgi 서버

mcdn 2020. 9. 12. 22:20
반응형

from http.server import HTTPServer, BaseHTTPRequestHandler

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response_only(200, 'OK')
        self.send_header('Content-Type', 'text/plain')
        self.end_headers()
        self.wfile.write(b"Hello World")

if __name__ == '__main__':
    server = HTTPServer(('', 8888), MyHandler)
    print("Started WebServer on port 8888....")
    print("Press ^C to quit WebServer.")
    server.serve_forever()

# --- web server most founded way ----
# 1. import "http.server" module
# 2. make handler class with BaseHTTPRequestHandler
# 3. with params( server IP, PORT, Handler class), make HTTPServer object
# 4. call serve_forever() in HTTPServer

python my_httpserver.py로 실행하면 

우리가 print하게 한 구문들이 프린트되면서 

serve_forever()가 진행된다. 

 

 

이때

http://127.0.0.1:8888/

에 들어가면 html에 hello world가 뜬다!

 ㄷ ㄷ ㄷ ㄷ

다음은 directory 반환이다. 

 

SimpleHTTPRequestHandler 클래스에 정의되어 있는 걸로 

별도의 코딩 없이 즉시 웹서버를 실행할 수 있다. 

 

터미널에 명렁어 

더보기

python -m http.server 8888

을 치고 Serving HTTP on 0.0.0. port 8888 

이라고 정상적으로 프린트된 메시지가 나오면 

 

http:// 127.0.0.1:8888에 들어가면 

해당 파일이 위치한 디렉토리 리스트가 반환된다. 

 

 

 

CGIHTTPRequestHAndler 도 비슷하게 즉시 웹서버 실행하는 기능이 있다. 

얜 조금 복잡한데 

python -m http.server 8888 --cgi

 명령어를 mysite> 이든 어떤 폴더에다가 친다.

그러면 웹서버 serving하면서 

더보기
(venv) C:\Users\user\PycharmProjects\Pytwebpractice\mysite>python -m http.server 8888 --cgi
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) ...

아까랑 비스하게 나타나는데 

 

코딩할게 좀 남았다

 

우선 다른 터미널 창을 열고 

+비주얼 스튜디오로 실행하고 있다면 옆에 플러스 버튼으로 하나더 만들자 

서버를 돌리고 있는 폴더 하위 폴더에 script.py를 만든다 

이따가 만들 클라이언트 py인 cgi_client.py를 보면 

from urllib.request import urlopen
from urllib.parse import urlencode

url = "http://127.0.0.1:8888/cgi-bin/script.py" # 여기

data = {
    'name':'kim',
    'email':'shi@naver.com',
    'url':'http://www.naver.com',
}
encData = urlencode(data)
postData = encData.encode('ascii')

f = urlopen(url, postData)
print(f.read().decode('utf-8'))

url을 가져오는 위치를 보면 왜 스크립트를 하위폴더에 만들라는지 이해가 된다. 

이 코드는 POST방식으로 요청할 웹 클라이언트를 작성한 것이다. 

 

웹 서버 시험용 CGI 스크립트 py이다. 

#! /usr/bin/env python

import cgi

form = cgi.FieldStorage() #() 빼먹어서 여러번 에러남 ㅋㅋㅋㅋㅋ 
name = form.getvalue('name')
email = form.getvalue('email')
url = form.getvalue('url')

print("Content-Type : text/plain")
print()

print("Welcome... CGI Scripts")
print("name is", name)
print("email is", email)
print("url is", url)

얘는 클라이언트한테서 가져온 name email url을 어떤 방식으로 출력할지 지시하는 코드인 것 같다. 

 

스크립트 py와 달리 클라이언트 py는 어디에 있어도 상관없다. 

두 코드 모두 작성하고 나서 

client.py 가 있는 위치에 가서 client.py를 실행하면.. 

오타나 위치 헷갈리는 거 없이 잘 적었으면 client가 쓴 이름 이메일 url대로 출력된다 !!!

 

 

반응형