본문 바로가기
웹(web)/백엔드-python

HelloServer

by 바코94 2020. 7. 1.

브라우저에서 localhost:8000를 입력하면 Hello, HTTP!를 화면에 보여주는 예를 살펴보자. 


HelloServer.py 코드

from http.server import HTTPServer, BaseHTTPRequestHandler

 

class HelloHandler(BaseHTTPRequestHandler):

  def do_GET(self):

    self.send_response(200)

    self.send_header('Content-type', 'text/plain; charset=utf-8')

    self.end_headers()

 

    self.wfile.write("Hello, HTTP!\n".encode())

 

if __name__ == '__main__':

  server_address = ('', 8000)

  httpd = HTTPServer(server_address, HelloHandler)

  httpd.serve_forever()

 


실행방법

1. 위 코드를 가지는 파이썬 파일을 실행한다. 

2. 브라우저로 들어가 주소창에 localhost:8000을 입력한다.

3. Hello, HTTP가 나오는 것을 확인한다.

4. 개발자 도구에 Network 탭에 들어가 헤더 정보를 확인한다.


구조적으로 살펴보자.

1. http.server를 이용하기 위한 import 구문

2. BaseHTTPRequestHandler를 상속해서 HelloHandler를 만들고 do_GET을 오버라이딩

3 주소,포트번호, HelloHandler를 이용하여 서버를 시작한다.

 

구체적으로 살펴보자.

1. http.server를 이용하기 위한 import 구문

공식문서에서 http.server 정의는 다음과 같다.

"This module defines classes for implementing HTTP servers (Web servers)."

이 모듈을 사용하면 웹서버의 기능을 제공한다는 것이다. 처음이니 이정도 인지하자.

 

2. BaseHTTPRequestHandler를 상속해서 HelloHandler를 만들고 do_GET을 오버라이딩

de_GET(self)라고 선언하여 BaseHTTPRequestHandler의 한 메서드를 오버라이딩했다. 앞으로 이 핸들러로 연결된 주소로 오는 GET요청에 대한 응답을 설정한다. 

response statusline, header lines, entity body 총 세 개의 값을 설정한다.  

self.send_response(200) : status code를 200으로 설정

self.send_header('Content-type', 'text/plain; charset=utf-8'): header field에 Content-type : text/plain; charset=utf-8; 추가

self.end_headers() : header에 대한 정보가 더 없음을 의미.\

self.wfile.write("Hello, HTTP!\n".encode()) : entity body에 "Hello, HTTP\n"를 인코딩. 

 

do_GET을 오버라이딩하여 response로 줄 내용을 설정하는 방식을 살펴보았다.

 

3 주소,포트번호, HelloHandler를 이용하여 서버를 시작한다.

HTTPServer를 생성할때 다음과 같은 코드를 사용하면 된다.

server_address = ('', 8000)  : ''를 쓰면 localhost 주소가 바인딩 된다.
httpd = HTTPServer(server_address, HelloHandler) : HTTPServer를 생성하는 방식
httpd.serve_forever() : server 시작

 

 

요청에 대한 response를 설정하는 기본 예제를 살펴보았다. 요청에 대한 응답이 HTTP인 것을 꼭 기억하자! 

 

'웹(web) > 백엔드-python' 카테고리의 다른 글

JSON  (0) 2020.07.02
do_GET+ do_POST 예제2  (0) 2020.07.01
do_GET+ do_POST 예제1  (0) 2020.07.01
parse_qs(POST data parsing)  (0) 2020.07.01
EchoServer  (0) 2020.07.01