개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.04.05 10:43

CGI.Discard_path 관련 질문

목록
  • Flutter전문가 9시간 전 2025.04.05 10:43 새글
  • 1
    1
cgi.discard_path를 사용하여 파라미터 삭제하기

저는 cgi.discard_path를 사용하여 파라미터를 삭제하고 싶은데, 어떻게 해야 하는지 모르겠습니다. 파라미터 삭제 후, URL에서 파라미터가 제거되는지 확인하고 싶습니다.

예를 들어, 다음 코드를 사용하여 파라미터를 삭제하는 방법을 알려주세요.

python

import cgi

from http.server import BaseHTTPRequestHandler, HTTPServer



class RequestHandler(BaseHTTPRequestHandler):



    def do_GET(self):

        path = self.path

        if "/discard" in path:

            cgi.discard_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 = HTTPServer(server_address, RequestHandler)

    print('Server running at http://localhost:8000/')

    httpd.serve_forever()



if __name__ == "__main__":

    run_server()



이 코드에서, "/discard" 경로에 요청이 들어오면 파라미터가 삭제되고, 파라미터가 남아 있는 경우에는 파라미터가 남아 있습니다. 라고 출력됩니다.

하지만, cgi.discard_path()를 사용하여 파라미터를 삭제하는 방법이 정확한지 궁금합니다.

위 코드에서 cgi.discard_path()를 사용하여 파라미터를 삭제하는 방법을 알려주세요.

    댓글목록

    profile_image
    나우호스팅  9시간 전



    `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

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 9,234건 / 2 페이지

검색

게시물 검색