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 標頭髮送資訊,並且可以透過 CGI 程式中的 QUERY_STRING 環境變數訪問。

您可以透過簡單地連線鍵值對以及任何 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

 

更新於: 2020年6月16日

2K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告