본문 바로가기
공부/파이썬 Python

Python에서 나만의 HTTP Server 만들기

by 혼밥맨 2022. 1. 3.
반응형

 

Python에서 나만의 HTTP Server 만들기

 

1. PowerShell 혹은 CMD (명령 프롬프트)에서 IPv4 주소 확인하기

 

2. 아래 코드 입력하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from http.server import HTTPServer, BaseHTTPRequestHandler
 
HOST = "0.0.0.0"
PORT = 9999
 
class MyHTTP(BaseHTTPRequestHandler):
 
  def do_GET(self):
    self.send_response(200)
    self.send_header("Content-type""text/html")
    self.end_headers()
 
    self.wfile.write(bytes("<html><body><h1>It is my HTTP Server!</h1></body></html>""utf-8"))
 
server = HTTPServer((HOST, PORT), MyHTTP)
 
print("running")
print(server)
print(HOST)
server.serve_forever()
server.server_close()
print("stopped")
cs

PORT를 9999로 입력한 이유는 PORT 번호는 임의로 1023보다 큰 숫자를 입력하면 되기 때문입니다.

 

 

3. IP주소 & 포트 입력 후 접속해보기

코드에서 입력한 HTML body가 잘 나오는 것을 확인할 수 있습니다.

HTTP Server를 이용한 파일 공유 등 다른 유용한 면을 알아보도록 하겠습니다.

 

4. 바탕화면에 임의 폴더 한 개를 만듭니다.

그리고 임의의 텍스트 파일을 몇 개 만듭니다.

 

5. cmd에서 server 실행하기

 

우선 cmd에서 새롭게 생성한 폴더 경로로 이동합니다.

그리고 위 이미지처럼 이동한 경로에서 "python -m http.server"를 입력하면 server를 실행할 수 있습니다.

 

크롬 도메인 창에 localhost:8000을 입력하고 접근하면, 이미지처럼 해당 경로에 저장된 파일들을 다운받고 공유할 수 있습니다.

 

6. 2번에서 작성한 코드에 POST 메소드 추가하기

2번에서 작성한 코드를 보면 GET 메소드만 구현되어 있습니다. 그렇기 때문에 아래 이미지처럼

"curl IP_ADDRESS:PORT -X POST" 명령어를 입력했을 때 Error가 발생합니다.

POST 메소드가 구현 안되어 있기 때문에 에러가 발생

 

POST 메소드를 추가해보도록 합니다.

 

"do_POST" 메소드를 추가했습니다. 기본적으로, POST 메소드를 호출하면 현재 시각을 출력할 수 있도록 했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import time
from http.server import HTTPServer, BaseHTTPRequestHandler
 
HOST = "0.0.0.0"
PORT = 9999
 
class MyHTTP(BaseHTTPRequestHandler):
 
  def do_GET(self):
    self.send_response(200)
    self.send_header("Content-type""text/html")
    self.end_headers()
 
    self.wfile.write(bytes("<html><body><h1>It is my HTTP Server!</h1></body></html>""utf-8"))
 
  def do_POST(self):
    self.send_response(200)
    self.send_header("Content-type""application/json")
    self.end_headers()
 
    date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
    self.wfile.write(bytes('{"time": "' + date + '"}'"utf-8"))
 
server = HTTPServer((HOST, PORT), MyHTTP)
 
print("running")
print(server)
print(HOST)
server.serve_forever()
server.server_close()
print("stopped")
cs

 

이제 다시 POST 메소드를 호출하고 테스트해봅시다!

네! POST를 호출하면 현재 시각을 잘 불러옵니다ㅎ

 

파이썬으로 간단히 HTTP Server 만드는 방법 알아봤습니다.

반응형

댓글