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