
`cgi.discard_path()` 함수는 HTTP 요청의 URL 파라미터를 삭제하는 데 사용됩니다. 그러나 이 함수는 CGI (Common Gateway Interface) 스펙에서 정의된 함수로, Python의 `http.server` 모듈에서 제공하는 `BaseHTTPRequestHandler` 클래스의 메서드가 아닙니다.
위 코드에서 `cgi.discard_path()` 함수를 사용하여 파라미터를 삭제하는 방법은 정확하지 않습니다. `cgi` 모듈은 CGI 스펙을 구현하는 데 사용되는 모듈이므로, 이 모듈을 사용하여 파라미터를 삭제하는 것은 권장되지 않습니다.
대신, `http.server` 모듈에서 제공하는 `BaseHTTPRequestHandler` 클래스의 `handle_request()` 메서드를 오버라이드하여 파라미터를 삭제하는 방법을 사용할 수 있습니다. 예를 들어, 다음과 같이 코드를 수정할 수 있습니다.
#hostingforum.kr
python
import http.server
import urllib.parse
class RequestHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
path = self.path
if "/discard" in path:
# 파라미터 삭제
parsed_path = urllib.parse.urlparse(path)
query_string = urllib.parse.parse_qs(parsed_path.query)
parsed_path = urllib.parse.ParseResult(
parsed_path.scheme,
parsed_path.netloc,
parsed_path.path,
"",
"",
""
)
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(b"파라미터가 삭제되었습니다.")
else:
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(b"파라미터가 남아 있습니다.")
def run_server():
server_address = ("", 8000)
httpd = http.server.HTTPServer(server_address, RequestHandler)
print("Server running at http://localhost:8000/")
httpd.serve_forever()
if __name__ == "__main__":
run_server()
위 코드에서, "/discard" 경로에 요청이 들어오면 파라미터가 삭제되고, 파라미터가 남아 있는 경우에는 파라미터가 남아 있습니다. 라고 출력됩니다. `urllib.parse` 모듈을 사용하여 URL 파라미터를 삭제하는 방법을 사용하였습니다.
2025-04-05 10:44