#python #anaconda #jupyter-notebook #visual-code #html #css #javascript #http

제목[re]기출문제 관련 질문2022-06-11 11:58
작성자

1. 

SimpleHTTPRequestHandler를 사용하는 이유는 자체적으로 do_GET이 있기 때문입니다.

지금 보내주신 코드를 보면 BaseHTTPRequestHandler를 사용하기 때문에 do_GET 함수를 따로 정의해놓으셨습니다.


기능만 제대로 한다면 어떤걸 사용하던 상관없어보입니다.


2.

네. 적절한 방법입니다.


3. 

인코딩을 했을 때, 에러가 뜨는 이유는 필요한 타입을 쓰지 않았기 때문입니다.

에러 내용이 bytes 형태의 오브젝트가 필요하니 str 타입 말고 bytes 타입의 변수를 넣으라는 뜻입니다.


지금 코드에서 self.wfile.write(text_byte) 부분을 제외하고 코드를 돌려도 에러가 나진 않습니다.

다만 "HTTP Requests: " 부분이 출력이 안될 뿐입니다.


제 생각에는 

text = "HTTP Requests: "

self.wfile.write(text)

로 작성해서 위의 에러가 발생한 것 같습니다.


4. 

위에서 말한 것 처럼 여기에서의 do_GET 함수는 Simple을 사용하지 않으셨기 때문에 직접 작성하신겁니다.


do_GET 함수는 요청 메시지의 메서드가 GET일 때 호출되어 응답 메시지를 전송하는 함수입니다.

간단하게 localhost에 새로운 과일을 입력할 때 마다 그 내용을 출력해주기 위해 설정한 함수입니다.


print 부분은 파이썬 화면에 request를 받았다고 알려주는 내용이고


self.send_response(200)은 응답 메시지의 상태 코드를 전송하는 것입니다. (ex. 404 not found)

지금은 200으로 되어 있으니 성공했다는 상태 코드를 전송합니다.


self.send_header()

self.end_headers() 

이 두 부분은 응답 메시지의 헤더를 전송하는 내용입니다.


text = "HTTP Requests: "

text_byte = text.encode('utf-8')

self.wfile.write(text_byte)

는 응답 메시지의 본문을 전송하는 내용으로 쉽게 말하면 화면에 HTTP Requests: 를 띄우는 내용입니다.


간단하게 

self.wfile.write(bytes("HTTP Requests: ", 'utf-8'))

로 쓰셔도 됩니다.


self.fruit.append(self.path.strip("/"))

http://localhost:9000/apple과 같은 내용에서 뒤의 apple을 받아오기 위한 내용입니다.


for문 안의 내용은 fruit의 내용을 받아서 화면에 HTTP Requests: 다음으로 띄우기 위한 내용입니다.

다만, 문제의 경우에는 각 단어 마다 ', ' 또는 '.'가 붙어 있습니다.

이 내용을 포함하기 위해 코드를 변경해야 합니다. 

아래 변경한 코드를 작성해놓았으니 직접 해본 후에 안된다면 참고하시길 바랍니다.


print(self.fruit)는 파이썬 화면에 작성한 과일을 보여주는 내용입니다.


try에서 실질적으로 코드를 작동시키며, 서버 종료를 위해 except로 예외처리 해놓으셨습니다.



- 참고용 코드

for i in range(len(self.fruit)):

if (i+1 == len(self.fruit)):

text = self.fruit[i] + "."

text_byte = text.encode('utf-8')

self.wfile.write(text_byte)

else:

text = self.fruit[i] + ", "

text_byte = text.encode('utf-8')

self.wfile.write(text_byte)



댓글