在 Python CGI 程式設計中,GET 和 POST 方法有什麼區別?
GET 和 POST 方法
您可能遇到過許多需要將一些資訊從瀏覽器傳遞到 Web 伺服器,最終傳遞到 CGI 程式的情況。最常見的是,瀏覽器使用兩種方法將這些資訊傳遞到 Web 伺服器。這些方法是 GET 方法和 POST 方法。
使用 GET 方法傳遞資訊
GET 方法傳送編碼的使用者資訊,這些資訊附加到頁面請求中。頁面和編碼資訊以 ? 字元分隔,如下所示:
http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2
GET 方法是將資訊從瀏覽器傳遞到 Web 伺服器的預設方法,它會生成一個長字串,該字串顯示在瀏覽器的 Location: 框中。如果您需要傳遞密碼或其他敏感資訊到伺服器,切勿使用 GET 方法。GET 方法有大小限制:請求字串中只能傳送 1024 個字元。GET 方法使用 QUERY_STRING 標頭髮送資訊,並且可以透過 QUERY_STRING 環境變數在 CGI 程式中訪問。
您可以透過簡單地連線鍵值對以及任何 URL 來傳遞資訊,或者可以使用 HTML <FORM> 標籤使用 GET 方法傳遞資訊。
簡單 URL 示例 - GET 方法
這是一個簡單的 URL,它使用 GET 方法將兩個值傳遞給 hello_get.py 程式。
/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI
下面是 hello_get.py 指令碼,用於處理 Web 瀏覽器提供的輸入。我們將使用 cgi 模組,這使得訪問傳遞的資訊變得非常容易:
#!/usr/bin/python # Import modules for CGI handling import cgi, cgitb # Create instance of FieldStorage form = cgi.FieldStorage() # Get data from fields 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>"
這將生成以下結果:
Hello ZARA ALI
簡單表單示例 - GET 方法
此示例使用 HTML 表單和提交按鈕傳遞兩個值。我們使用相同的 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
使用 POST 方法傳遞資訊
將資訊傳遞到 CGI 程式的一種通常更可靠的方法是 POST 方法。此方法以與 GET 方法完全相同的方式打包資訊,但它不是在 URL 中 ? 後面傳送為文字字串,而是將其傳送為單獨的訊息。此訊息以標準輸入的形式進入 CGI 指令碼。
下面是相同的 hello_get.py 指令碼,它處理 GET 和 POST 方法。
#!/usr/bin/python # Import modules for CGI handling import cgi, cgitb # Create instance of FieldStorage form = cgi.FieldStorage() # Get data from fields 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>"
讓我們再次採用與上面相同的示例,該示例使用 HTML 表單和提交按鈕傳遞兩個值。我們使用相同的 CGI 指令碼 hello_get.py 來處理此輸入。
<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>
這是上面表單的實際輸出。您輸入姓和名,然後單擊提交按鈕以檢視結果。
First Name: Last Name: Submit