Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python CGI에서 GET 메서드로 정보 전달하기 – 원리와 예제 총정리

GET 메서드란?

GET 메서드는 인코딩된 사용자 정보를 페이지 요청 주소 뒤에 덧붙여 전송하는 방식입니다. 이때 페이지 URL과 인코딩된 정보는 물음표(?) 문자로 구분됩니다.

https://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2

GET 메서드는 브라우저에서 웹 서버로 정보를 전달하는 기본(default) 방식이며, 전송된 정보는 브라우저의 주소 표시줄(Location)에 긴 문자열 형태로 그대로 노출됩니다. 따라서 비밀번호나 기타 민감한 정보를 서버로 전달해야 하는 경우에는 절대 GET 메서드를 사용해서는 안 됩니다.

또한 GET 메서드에는 크기 제한이 있습니다. 하나의 요청 문자열에는 최대 1024자까지만 담을 수 있습니다. GET 메서드는 QUERY_STRING 헤더를 통해 정보를 전송하며, CGI 프로그램 내부에서는 QUERY_STRING 환경 변수를 통해 해당 정보에 접근할 수 있습니다.

정보를 전달하는 방법은 크게 두 가지입니다. 첫째, URL 뒤에 키(key)와 값(value) 쌍을 직접 연결하는 방식이고, 둘째, HTML <FORM> 태그를 사용해 GET 방식으로 데이터를 넘기는 방식입니다.

간단한 URL 예제: GET 메서드

다음은 GET 메서드를 사용해 두 개의 값을 hello_get.py 프로그램에 전달하는 간단한 URL 예시입니다.

아래의 hello_get.py 스크립트는 웹 브라우저가 보낸 입력값을 처리합니다. cgi 모듈을 활용하면 전달된 정보에 아주 손쉽게 접근할 수 있습니다.

예제 코드

#!/usr/bin/python
# CGI 처리를 위한 모듈 임포트
import cgi, cgitb

# FieldStorage 인스턴스 생성
form = cgi.FieldStorage()

# 필드에서 데이터 가져오기
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

참고: 위 코드는 파이썬 2의 print 문법을 기준으로 작성되었습니다. 파이썬 3 환경에서는 print() 함수 형태로 작성해야 합니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Hello ZARA ALI

간단한 FORM 예제: GET 메서드

이번 예제는 HTML 폼(Form)과 제출 버튼을 사용해 두 개의 값을 전달합니다. 앞서 살펴본 것과 동일한 CGI 스크립트인 hello_get.py가 이 입력값을 그대로 처리합니다.

<form action = "/cgi-bin/hello_get.py" method = "get">
First Name: <input type = "text" name = "first_name"> <br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>

실행 결과

위 폼의 실제 실행 화면입니다. 이름(First Name)과 성(Last Name)을 입력한 뒤 제출(Submit) 버튼을 클릭하면, GET 방식으로 전달된 값이 CGI 프로그램에 의해 처리되어 결과를 확인할 수 있습니다.

Python CGI에서 GET 메서드로 정보 전달하기 – 원리와 예제 총정리