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대로 출력된다 !!!
'파이썬' 카테고리의 다른 글
Template 화면 UI 정의 (0) | 2020.09.18 |
---|---|
정규표현식에 사용되는 문자의 의미. (0) | 2020.09.13 |
Django's MTV pattern 과 코딩 순서 (0) | 2020.09.13 |
간단 wsgi server 까지 (0) | 2020.09.12 |
http.client 모듈 예제 download-image from google (0) | 2020.09.10 |
파이썬 urlopen()함수 예제 - Request 클래스로 요청 헤더 지정 (0) | 2020.09.10 |
[장고&파이썬웹] urllib.request 모듈 예제 재작성 (0) | 2020.09.06 |
홍련화 가사 html for li in lis with xpath (0) | 2020.08.29 |