21 — HTTP — 웹 서버에 물어보기
HTTP는 프로그램이 웹 서버에게 페이지를 묻는 방법입니다. 예제
examples/http-client.ko.nme는 http://localhost:8000으로 자기 컴퓨터에게
파일을 요청합니다. 이 프로젝트는 학습용이며 조언이 아닙니다.
먼저 폴더 하나를 서비스하고, 두 번째 터미널에서 예제를 실행하세요:
python3 -m http.server 8000
nme 실행 examples/http-client.ko
서버 응답: 안녕하세요, HTTP에서 왔어요!
단계
urllib은 Python 표준 라이브러리라 설치가 필요 없습니다. 프로그램은 서버와 대화하는 부분을 가져오고 URL을 정합니다:
실행해 보기 →# examples/http-client.ko.nme의 일부 import urllib.request url = "http://localhost:8000/hello.txt"localhost는 "이 컴퓨터"라는 뜻이고,8000은 첫 터미널의 서버가 듣는 포트입니다.urlopen은 그 URL에 연결을 열고 응답을 돌려줍니다. 응답은 아직 글이 아니라 바이트이므로 읽고 디코딩해야 합니다:
실행해 보기 →# examples/http-client.ko.nme의 일부 with urllib.request.urlopen(url) as response: body = response.read().decode("utf-8")with블록은 끝날 때 연결을 닫고,.decode("utf-8")이 바이트를 문자열로 바꿉니다.마지막 줄이 답을 보여 줍니다.
body.strip()은 서버가 파일과 함께 보낸 마지막 새 줄을 없앱니다:
실행해 보기 →# examples/http-client.ko.nme의 일부 말해 "서버 응답: " + body.strip()nme 검사는 서버 없이도 프로그램을 확인합니다 — 확인은 문법만 필요하고, 실행만 서버가 필요합니다:nme 검사 examples/http-client.ko영어 쌍둥이
examples/http-client.nme는 같은 프로그램을 씁니다. 마지막show만show "the server answered: " + body.strip()로 바뀝니다. 같은 폴더에서nme 실행 examples/http-client로 실행하면 영어로 같은 결과가 나옵니다.
직접 해보기
서비스하는 폴더에 두 번째 파일 hello2.txt를 만들고 url을 그 파일로
바꿔 보세요. 다시 시작할 필요는 없습니다 — 서버는 파일을 요청할 때마다
읽습니다 — 그리고 예제를 다시 실행해 새 파일을 확인하세요.
배운 것
python3 -m http.server 8000은 현재 폴더를localhost:8000에서 서비스합니다.urllib.request.urlopen(url)은 연결을 열고 응답을 돌려줍니다.- 응답은
.read()로 읽고.decode("utf-8")로 디코딩해야 합니다. body.strip()은 서버가 보낸 새 줄을 없앱니다.