지구정복

[Python] 3/17 | 파이썬에서 웹서버 사용(서버실행, get과 post방식 사용) 본문

데이터 엔지니어링 정복/Python

[Python] 3/17 | 파이썬에서 웹서버 사용(서버실행, get과 post방식 사용)

eeaarrtthh 2021. 3. 17. 10:22
728x90
반응형

1. 파이썬에서 웹서버 사용

더보기

cmd에서 아래 명령어 입력

그리고 웹브라우저에서 localhost:8080을 검색하면 서버안에 디렉터리들이 보인다.

서버를 조작하는 라이브러리는
SimpleHTTPRequestHandler
BaseHTTPRequestHandler
이다. 

서버실행하기

from http.server import HTTPServer, SimpleHTTPRequestHandler

httpd = HTTPServer( ('127.0.0.1', 8080), SimpleHTTPRequestHandler )
print( '서버시작' )
httpd.serve_forever()
print( '서버종료' )




서버시작

http://localhost:8080 을 브라우저에 입력하면 아래와 같이 pydev의 파이썬 프로젝트 src의 디렉터리가 보인다.
만약 현재 8080포트를 사용중이라면 다른 포트로 변경해준다. 아무거나 8081등 과 같이

 

서버에서 get과 post방식 사용

from http.server import HTTPServer, BaseHTTPRequestHandler

class MyHTTPRequestHandler( BaseHTTPRequestHandler ):
    def do_GET(self):
        print( 'get방식 요청' )
        
    def do_POST(self):
        print( 'post방식 요청' )

#자바에서 public static void main() 메소드와 같다.
if __name__ == '__main__':
    httpd = HTTPServer( ('127.0.0.1', 8080), MyHTTPRequestHandler )
    print( 'Server Start' )
    httpd.serve_forever()
    print( 'Server End' )
    
    
    
Server Start

 

get방식

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()
        
        html='''
        <!doctype html>
        <html lang="ko">
        <head>
        </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', 8081), MyHTTPRequestHandler )
    print( 'Server Start' )
    httpd.serve_forever()
    print( 'Server End' )
    
    
    
    
Server Start
get방식 요청
127.0.0.1 - - [17/Mar/2021 09:45:05] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [17/Mar/2021 09:45:05] "GET /favicon.ico HTTP/1.1" 200 -
get방식 요청

 

전송데이터 메서드화 하기

보통 전송데이터를 메서드화해서 사용한다.

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()
        
        self.send_body1()
        
    #전송 데이터 메서드화
    def send_body1(self):
        html='''
        <!doctype html>
        <html lang="ko">
        <head>
        </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', 8081), MyHTTPRequestHandler )
    print( 'Server Start' )
    httpd.serve_forever()
    print( 'Server End' )

 

한글을 집어넣고 보내보자.

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()
        
        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', 8081), MyHTTPRequestHandler )
    print( 'Server Start' )
    httpd.serve_forever()
    print( 'Server End' )

 

데이터 쿼리 출력하기

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()
        
        print( self.path )
        
        parts = urlparse( self.path )
        keyword, value = parts.query.split( '=', 1)
        print( keyword, value )
        
        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', 8081), MyHTTPRequestHandler )
    print( 'Server Start' )
    httpd.serve_forever()
    print( 'Server End' )


쿼리 데이터별로 실행되는 html문서 나누기

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()
        
        print( self.path )
        
        parts = urlparse( self.path )
        keyword, value = parts.query.split( '=', 1)
        print( keyword, value )
        
        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', 8081), MyHTTPRequestHandler )
    print( 'Server Start' )
    httpd.serve_forever()
    print( 'Server End' )

 

 

 

 

 

 

 

728x90
반응형
Comments