WEB2 - Python

활용 - URL query string을 가져오는 방법

수업소개

URL의 query string을 입력 값으로 웹애플리케이션으로 끌어오는 방법을 소개합니다. 

 

 

강의

이 수업의 예제에서는 접속 URL에 ?id가 포함되어 있어야 오류없이 동작합니다. 

 

 

소스코드

index.py

변경사항

#!/usr/local/bin/python3
print("Content-Type: text/html")
print()
import cgi
form = cgi.FieldStorage()
pageId = form["id"].value
print('''<!doctype html>
<html>
<head>
  <title>WEB1 - Welcome</title>
  <meta charset="utf-8">
</head>
<body>
  <h1><a href="index.py">WEB</a></h1>
  <ol>
    <li><a href="index.py?id=HTML">HTML</a></li>
    <li><a href="index.py?id=CSS">CSS</a></li>
    <li><a href="index.py?id=JavaScript">JavaScript</a></li>
  </ol>
  <h2>{title}</h2>
  <p>The World Wide Web (abbreviated WWW or the Web) is an information space where documents and other web resources are identified by Uniform Resource Locators (URLs), interlinked by hypertext links, and can be accessed via the Internet.[1] English scientist Tim Berners-Lee invented the World Wide Web in 1989. He wrote the first web browser computer program in 1990 while employed at CERN in Switzerland.[2][3] The Web browser was released outside of CERN in 1991, first to other research institutions starting in January 1991 and to the general public on the Internet in August 1991.
  </p>
</body>
</html>
'''.format(title=pageId))

 

댓글

댓글 본문
  1. Sansol Park
    문제 해결을 위한 단계
    CGI 스크립트의 첫 번째 줄 확인:

    CGI 스크립트의 첫 번째 줄은 #!로 시작하는 셰뱅(shebang) 라인입니다. 이 줄은 스크립트를 실행할 때 사용할 인터프리터를 지정합니다. 예를 들어, #!/usr/bin/env python3와 같이 설정해야 합니다. 이 줄이 올바르게 설정되어 있는지 확인하세요.
    헤더 출력 확인:

    CGI 스크립트는 반드시 HTTP 헤더를 출력해야 합니다. print("Content-Type: text/html") 다음에 빈 줄을 출력하여 헤더와 본문을 구분해야 합니다. 이 부분은 이미 코드에 포함되어 있는 것 같습니다 [52].
    파일 권한 확인:

    CGI 스크립트 파일에 실행 권한이 있는지 확인하세요. Windows에서는 이 부분이 크게 문제되지 않지만, XAMPP 설정에서 파일 권한이 올바르게 설정되어 있는지 확인해야 합니다.
    에러 로그 확인:

    에러 로그에 기록된 내용을 주의 깊게 살펴보세요. End of script output before headers 오류는 일반적으로 스크립트가 헤더를 출력하기 전에 종료되었음을 의미합니다. 이는 스크립트 내에서 예외가 발생하거나, 인터프리터가 올바르게 설정되지 않았을 때 발생할 수 있습니다.
    XAMPP 설정 확인:

    XAMPP의 Apache 설정 파일(httpd.conf)에서 CGI 설정이 올바르게 되어 있는지 확인하세요. 특히, ScriptAlias와 AddHandler 지시문이 올바르게 설정되어 있는지 확인해야 합니다.
    Python 버전 확인:

    Python 3.10.8 버전이 올바르게 설치되어 있는지, 그리고 XAMPP에서 해당 버전을 사용하도록 설정되어 있는지 확인하세요.
    추가적인 조치
    디버깅 메시지 추가:

    스크립트에 디버깅 메시지를 추가하여 어느 부분에서 문제가 발생하는지 확인할 수 있습니다. 예를 들어, print("Debug: Step 1")과 같은 메시지를 추가하여 스크립트의 진행 상황을 추적할 수 있습니다.
    환경 변수 확인:

    XAMPP에서 Python 스크립트를 실행할 때 필요한 환경 변수가 올바르게 설정되어 있는지 확인하세요. 특히, PYTHONPATH와 같은 변수가 올바르게 설정되어 있는지 확인해야 합니다.
    다른 서버 환경 테스트:

    가능하다면, 다른 서버 환경(예: 로컬 Python 서버)에서 스크립트를 실행하여 동일한 문제가 발생하는지 확인해 보세요. 이를 통해 XAMPP 설정 문제인지, 스크립트 자체의 문제인지 구분할 수 있습니다.
    위의 단계들을 하나씩 점검해 보시고, 문제가 지속된다면 추가적인 로그나 설정 파일을 공유해 주시면 더 구체적인 도움을 드릴 수 있을 것 같습니다.
    대화보기
    • 세븐9962
      앞에까지 잘 따라가다가 cgi가 불러와지지 않아서 찾아본 결과 제가 사용하고 있던 파이썬의 버전이 3.13 버전이라 cgi가 삭제된 상황이라서 3.10.8로 다운그레이드 하여 앞의 내용을 다시 따라갔습니다. 하지만, 그 결과 틀린 부분 없이 모두 동일하게 진행하고 있었는데도 불구하고 'End of script output before headers' 오류가 계속 발생하고 있습니다. wamp는 서비스를 종료한 거 같아서 대체제로 xampp를 사용하고 있고, 작업환경은 vscode에 파이썬은 앞서 말씀드렸듯 3.10.8버전이고 window11에서 작업하고 있습니다. 다른 방법을 찾아보려 검색해봐도 해결이 되지 않아서 이렇게 댓글 남깁니다. 혹시 몰라서 아래에 제가 작성한 코드와 에러 로그를 확인하실 수 있도록 적어두었습니다.

      #!python
      print("Content-Type: text/html")
      print()
      (이 뒤는 모두 동일)

      error.log
      [Wed Feb 19 17:44:12.195756 2025] [cgi:error] [pid 7500:tid 1920] [client ::1:4976] End of script output before headers: index.py
      [Wed Feb 19 17:44:12.195756 2025] [cgi:error] [pid 7500:tid 1920] [client ::1:4976] AH01215: Python: D:/xampp/htdocs/index.py
    • Sansol Park
      혹시 이 방법도 확인해보셨을까요?

      김민석
      이고잉님 강의 듣고 있는 파이썬 초보입니다.
      요즘 파이썬 강의를 듣고 있다가 저도 다른분들처럼 window 환경에서 강의를 듣고 있는데 페이지가 하얗게 넘어가는 부분에서 막혀서 고생하다가 구글링해서 해결방법을 찾아봤는데요.
      일단 window 환경에서는 라이브러리를 하나 더 추가해야합니다.
      import cgi,cgitb
      cgitb.enable() #for debegygging
      form = cgi.FieldStorage()
      pageId = form.getvalue('id')
      이렇게 하니까 화면이 표시 되더라구요. 보고 도움이 됐으면 좋겠습니다!
      대화보기
      • import cgi 를 한 이후로 흰색 창이 뜨는데 검색해봐도 오류가 뭔지 모르겠습니다..
        구글 검색도 해봤고, 댓글 창도 다 확인해봤는데 모르겠어서 질문드려요....! 윈도우 사용 중입니다

        [Thu Oct 31 03:11:04.183175 2024] [cgi:error] [pid 8536:tid 1252] [client 127.0.0.1:50533] AH01215: Traceback (most recent call last):\r: C:/Bitnami/apache2/htdocs/index.py
        [Thu Oct 31 03:11:04.183175 2024] [cgi:error] [pid 8536:tid 1252] [client 127.0.0.1:50533] AH01215: File "C:\\Bitnami\\apache2\\htdocs\\index.py", line 6, in <module>\r: C:/Bitnami/apache2/htdocs/index.py
        [Thu Oct 31 03:11:04.183175 2024] [cgi:error] [pid 8536:tid 1252] [client 127.0.0.1:50533] AH01215: import cgi\r: C:/Bitnami/apache2/htdocs/index.py
        [Thu Oct 31 03:11:04.183175 2024] [cgi:error] [pid 8536:tid 1252] [client 127.0.0.1:50533] AH01215: ModuleNotFoundError: No module named 'cgi'\r: C:/Bitnami/apache2/htdocs/index.py
      • labis98
        새로운 시작 20240926~~~!!!
      • 코딩척척석사
        2023.03.15
      • 최정우
        windows 환경에서 지속적으로 cgi 에러가 발생해서 macOS에서 실행해보니 양호합니다
      • scientist
        큰 도움 됐습니다!
        대화보기
        • scientist
          220729
        • Klee
          CGI 모듈로 query string (or URL parameter)를 받아오기
          아직 id 값을 받아오는 게 무슨 장점이 있는지 모르겠으나 공부하다보면 알게될거라 믿고 진행
        • Seunggwang Baek
          강의에서 <a href="1.html">을 <a href="index.py?id=HTML">로 변경할 때
          왼쪽은 1.html파일을 읽는다고 생각하면 이해가 가는데 오른쪽처럼 변경하면 어떤 파일을 읽는 컴퓨터가 어떻게 이해하나요?
          ""안에 파일 이름을 입력해야하는거 아닌가요?
        • 윤재승
          아주아주좋아요!
        • labis98
          2022.02.20 좋은 강의 한번 더 들어요~~~!
        • pmxsg
          2022.02.04
        • labis98
          20220105 좋은 강의 감사합니다~~~!
        • 2021.09.10 완료
        • 조민영
          저도 Style Tag삭제하니 일단은 작동 잘하네요..
          왜 Style tag가 문제되는지는 고민해 봐야겠지만요 ㅠㅠ
          대화보기
          • 초딩 개발자
            2021/05/09
          • jeisyoon
            2021.04.08 URL query string 가져오는 법 - OK
          • 이수완
            헐,.. 감사합니다..
            대화보기
            • Americano
              21.03.02
            • younghwani
              완료!
            • 박민지
              2021.01.11
            • hksap
              210101
            • 하양색
              이전에 구글 애널리틱스를 넣으니 아마 시스템상으로 충돌이나 밴같은게 있었던것 같습니다. 우선 진도를 진행해보지만 나중에는 이것을 다시 넣기위해 한번 사투를 가져봐야 할것 같습니다.
            • park
              2020.10.12
            • dagel0102
              20.10.09
            • cgoing
              cgoing / 2020.10.02
            • jiyeong
              2020.09.01.
            • 늦깍이 개발자
              form["id"].value ==> form.getvalue("id") 로 변경 해서 해보세요
            • 김태풍
              경로문제라 함은 어떤걸 말씀하시는지 알 수 있을까요?ㅠㅠ
              대화보기
              • 엄세환
                경로문제 같은데요?
                대화보기
                • 김태풍
                  안녕하세요 아랫분들과 같이 index.py 페이지에서 하얀 페이지만 보여서 댓글 남깁니다.
                  저는 아래와 같은 에러로그가 나왔는데 구글링을 해도 도저히 찾을 수가 없더라고요 ㅜㅜ
                  혹시 아시는 분 있으면 도움 주심면 감사하겠습니다....!

                  print("""\r: C:/Bitnami/wampstack-7.4.8-0/apache2/htdocs/index.py
                  ValueError: unexpected '{' in field name\r: C:/Bitnami/wampstack-7.4.8-0/apache2/htdocs/index.py
                • OneJae EE
                  20.05.02 토 / 37세 비전공자 / 완료
                • Mocha
                  이전 비디오 부터는 어렵네요...
                • 말룩얼
                  if "id" in form:
                  pageId = form["id"].value

                  이부분 추가하면 되긴 됩니다.
                  그런데 제대로 들여쓰기 해주셔야 동작하네요!

                  if "id" in form:pageId = form["id"].value

                  이렇게 붙여쓰시던지
                  if "id" in form:
                  pageId = form["id"].value
                  이렇게 들여써주셔야 됩니다.

                  파이썬은 space 공백이랑, tap 공백도 민감하게 반응하기 때문에
                  자칫 syntax error 발생할 수도 있거든요!
                  대화보기
                  • 스티븐잡숴
                    완료
                  • spam
                    저는 맥을 쓰고 있는데 한글로 써도 정상적으로 작동해요!
                    대화보기
                    • easyBAMM
                      import cgi
                      form = cgi.FieldStorage()
                      pageId = "WEB"
                      if "id" in form:
                      pageId = form["id"].value

                      이런 식으로 하면 해결이 되는 거 같아요!
                      pageId를 id가 없으면 그냥 WEB으로 id가 있으면 id의 값으로 설정하는 코드입니다.
                      활용-조건에 반응하는 앱 만들기 편을 보시면 됩니다!
                      대화보기
                      • apldeap
                        12/25
                      • 보는이
                        .format 하얀화면 때문에 막히네요
                      • xuanxi
                        20191125
                      • 쑤우
                        수강완료. 감사합니다.
                      • 굼벵이
                        완료
                      • 20191003 Ted 완료!
                      • 공부중
                        아 너무 감사합니다 ^^
                        대화보기
                        • 김영인
                          강의대로 따라가다가 하얀화면이 계속되어서 맨붕중인데요,
                          저는 맥북으로 수업진행중이고, 파이선 3.7버전을 사용중입니다.

                          format을 쓰자마자 오류가 났습니다.
                          keyError: "pageLayer" 라는 오류코드가 떠서 검색해봐도 pageLayer 관련 글은 없더라구요,
                          그래서 댓글에 나와있는데로 web1수업때 추가했던 구글 애널리틱스와 댓글기능 관련 코드를 지우니 그건 해결 되었습니다.

                          그 후 다시 수업을 따라서 진행을 했는데,
                          import cgi
                          form = cgi.FieldStorage()
                          pageId = form["id"].value
                          위 태그를 넣으니 또 에러가 나네요 ㅠㅠ

                          Traceback (most recent call last):
                          File "/Applications/mampstack-7.3.7-0/apache2/htdocs/WEB2-Python/index.py", line 6, in <module>
                          pageId = form["id"].value
                          File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/cgi.py", line 534, in __getitem__
                          raise KeyError(key)
                          KeyError: 'id'

                          에러코드 내용을 보면 파이썬 3.7 버전과도 관련있어 보이는데, 어쩌면 좋을까요?ㅠㅠ
                          index.py에 id값을 넣어줘도 안되네요
                          (이고잉님께서 수업때 사용하신 index.py를 그대로 복사해서 사용해도 똑같은 에러가 납니다.)

                          (19. 7. 23. 수정)
                          하루종일 해결해 보려다가 포기하고 다음 강의를 계속 보니까, 제어문 수업에 똑같은 에러를 다루네요...(ㅠㅠ)
                          아마 index.py에 id값이 없는게 문제였나봅니다. index.py에 id값을 넣고 주소창에도 index.py?id='web' 이렇게 쳐 주니까 정상적으로 작동하더라구요, 저는 계속 주소창에 index.py라고만 쳐서.... 못 읽었나봅니다. 버전이랑은 상관없는 듯 하네요
                        • HoWWWWWhy
                          감사합니다. 이 댓글 덕분에 힌트를 얻어서...
                          html 수업에서 추가해놓았던 게시판 관련 코드를 지웠더니 해결됐어요!!
                          대화보기
                          • 에듀케이티드키드
                            잘들었습니다~
                          • Inyeong Gim
                            여기부터 진행이 안되서 막혔습니다. ㅠㅠ.. 나머지 강의들부터 듣고 있는데, 어떻게 해결해야할지 어렵네요
                          버전 관리
                          egoing
                          현재 버전
                          선택 버전
                          graphittie 자세히 보기