Phương thức GET và POST
Thường cần truyền thông tin từ browser đến web server và cuối cùng đến CGI Program. Browser thường dùng hai phương thức: GET và POST.
Truyền thông tin bằng GET method
GET gửi thông tin user đã mã hóa nối vào request trang. Trang và thông tin mã hóa tách bằng ký tự ?:
https://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2
GET là phương thức mặc định, tạo chuỗi dài hiện trong Location box của browser. Không dùng GET cho password hoặc thông tin nhạy cảm. GET giới hạn kích thước: chỉ 1024 ký tự trong request string. GET gửi thông tin qua header QUERY_STRING, truy cập trong CGI qua biến môi trường QUERY_STRING.
Ví dụ URL đơn giản - GET Method
/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI
Script hello_get.py xử lý input (dùng module cgi):
#!/usr/bin/python
import cgi, cgitb
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>"
Ví dụ FORM đơn giản - GET Method
<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>
Truyền thông tin bằng POST Method
POST là phương thức đáng tin cậy hơn. Gói thông tin giống GET nhưng gửi như một message riêng biệt (không phải chuỗi text sau ? trong URL). Message này đến CGI script dạng standard input.
Script hello_get.py xử lý cả GET và POST:
#!/usr/bin/python
import cgi, cgitb
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>"
Form HTML dùng POST:
<form action="/cgi-bin/hello_get.py" method="post"> First Name: <input type="text" name="first_name"><br /> Last Name: <input type="text" name="last_name" /> <input type="submit" value="Submit" /> </form>