p.407 웹서버만들기
httpserver -> 서버 만들 수 있음
서버 띄우는 2가지 방법
- SimpleHTTPRequestHandler
- BaseHTTPRequestHandler
cmd 창에서 python -m http.server --cgi 8080 입력
방화벽을 허용해준다.
브라우저에서 127.0.0.1:8080 으로 접속해보면 서버의 디렉토리 확인가능
- SimpleHTTPRequestHandler
# server01.py
from http.server import HTTPServer, SimpleHTTPRequestHandler
#print( dir( HTTPServer ) )
#print( dir( SimpleHTTPRequestHandler ) )
httpd = HTTPServer( ( '127.0.0.1', 8000 ), SimpleHTTPRequestHandler )
print( '서버시작' )
# 무한 루프
httpd.serve_forever()
print( '서버종료' )
- BaseHTTPRequestHandler
html 태그 출력
path 출력 -> parameter / url
# server02.py
from http.server import HTTPServer, BaseHTTPRequestHandler
class MyHTTPRequestHandler( BaseHTTPRequestHandler ):
def do_GET(self):
print( 'get 방식 요청' )
self.send_response( 200 )
self.send_header( 'Content-type', 'text/html; charset=utf-8' )
self.end_headers()
# parameter / url
print( self.path )
self.send_body1()
def send_body1(self):
html = '''
<!doctype html>
<html lang=ko>
<head>
<meta charset="utf-8" />
</head>
<body>
Hello Python, 안녕 파이썬
</body>
</html>
'''
self.wfile.write( html.encode( 'utf-8' ) )
def do_POST(self):
print( 'post 방식 요청' )
# public static void main()
if __name__ == '__main__' :
httpd = HTTPServer( ( '127.0.0.1', 8000 ), MyHTTPRequestHandler )
print( '서버시작' )
httpd.serve_forever()
print( '서버종료' )
- controller 방식 구현
path를 urlparse로 넣고 분해해서 keyword와 value로 분리
value 값에 따라서 출력 다르게 나오도록 컨트롤러(if문 구성)
# server02.py
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import urlparse
class MyHTTPRequestHandler( BaseHTTPRequestHandler ):
def do_GET(self):
print( 'get 방식 요청' )
self.send_response( 200 )
self.send_header( 'Content-type', 'text/html; charset=utf-8' )
self.end_headers()
# parameter / url
print( self.path )
parts = urlparse( self.path )
keyword, value = parts.query.split( '=', 1 )
print( keyword, value )
# controller
if value == 'value1' :
self.send_body1()
elif value == 'value2' :
self.send_body2()
else:
pass
def send_body1(self):
html = '''
<!doctype html>
<html lang=ko>
<head>
<meta charset="utf-8" />
</head>
<body>
Hello Python, 안녕 파이썬1
</body>
</html>
'''
self.wfile.write( html.encode( 'utf-8' ) )
def send_body2(self):
html = '''
<!doctype html>
<html lang=ko>
<head>
<meta charset="utf-8" />
</head>
<body>
Hello Python, 안녕 파이썬2
</body>
</html>
'''
self.wfile.write( html.encode( 'utf-8' ) )
def do_POST(self):
print( 'post 방식 요청' )
# public static void main()
if __name__ == '__main__' :
httpd = HTTPServer( ( '127.0.0.1', 8000 ), MyHTTPRequestHandler )
print( '서버시작' )
httpd.serve_forever()
print( '서버종료' )
'Python' 카테고리의 다른 글
Python - 12. 데이터베이스 - SQLite (0) | 2021.03.15 |
---|---|
Python - 11. 데이터베이스 - mariaDB와 연동 (0) | 2021.03.15 |
Python - 10. 중요 모듈 (수학, 파일 입출력) (0) | 2021.03.11 |
Python - 9. 중요 모듈 (시스템, 날짜·시간 모듈) (0) | 2021.03.10 |
Python - 8. 모듈 (0) | 2021.03.10 |