CGI程式中POST和GET訊息的處理
資料傳送格式 當用戶填完表格並按了SUBMIT按鈕後,Web瀏覽器並非將使用者所填的資料直接送給Web伺服器, 而先要經過一定的編碼處理。 Web瀏覽器總是將資料按照“變數名=變數值”這樣的資料對格式進行編碼,並且每對資料之間 用一個&符號相連線。其中“變數名”就是Form元素中的NAME屬性值;“變數值”則是使用者在 輸入框中所輸入的資料,或者是使用者所選擇的資料(即RADIO,CHECKBOX,OPTION中 的VALUE值)。 並且Web瀏覽器將使用者資料中的所有空格都替換成"+"號。另外一些特殊字元的表示使用轉義 符"%"後面加上該特殊字元的十六進位制ASCII碼。特殊字元主要包括"="、"+"、"&"、"%"以及多 行文字中的回車,換行符,所有不能直接顯示的高位ASCII符等。
一個Form的簡單例子 例如在上例中使用者填入了下述資訊(其中/n表示回車換行): name "J&K" sex "male" flavor "apple" flavor "orange" weight "middle" opinion "I think it is necessary that/nman eat fruit everyday." 則Web瀏覽器傳送資料時的字元序列為: name=J%26K&sex=male&flavor=apple&flavor=orange&weight=middle& opinion=I+think+it+is+necessary+that%0D%0Aman+eat+fruit+everyday. 用CGI程式處理得到的資料 當Web瀏覽器將Form資料經過編碼後,就傳送給了Web伺服器,而Web伺服器並非自己處理這些 資料,而是先依靠CGI程式來幫忙處理這些資料,然後Web伺服器再把CGI程式產生的處理結果 返回給Web瀏覽器。
CGI(Common Gateway Interface,通用閘道器介面)是資訊伺服器(如Web服 務器)與外部應用程式之間的一個介面標準。通常被Web伺服器所取到的HTML檔案總是事先編 輯好的,固定不變的資訊,但若通過實時執行著的CGI程式Web伺服器就有可能向Web瀏覽器 輸出動態的資訊。 CGI標準用最簡單的話來說就是:CGI程式是通過標準輸入(stdin)或環境變數來得到伺服器的輸 入資訊,並通過標準輸出(stdout)向伺服器輸出資訊。 當Web伺服器收到了由Web瀏覽器傳來的Form資料時,就啟動標記中ACTION屬性所指 明的CGI程式。如果METHOD屬性值是GET,CGI程式就從環境變數QUERY_STRING中獲取Form數 據;若METHOD屬性值是POST,CGI程式就從標準輸入(stdin)中獲取Form資料。 CGI程式獲取Form資料並經過處理後,還要向Web伺服器返回一定的資訊(如資料的處理結果等 )。為讓Web伺服器能正確理解所返回的是何種資訊,CGI規定在輸出的資訊體前加上一個頭部 資訊,該頭部資訊由若干行ASCII文字構成,並用一個空行將頭部資訊與資訊體隔開。
例如要返 回HTML文件則頭部資訊為"Content-type: text/html"。 下面給出一個用C語言編寫的CGI程式的基本框架:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- char InputBuffer[4096];
- int DecodeAndProcessData(char *input); /*具體譯碼和處理資料,該函式程式碼略*/
- int main(int argc, char*argv[])
- {
- int ContentLength; /*資料長度*/
- int x;
- int i;
- char *p;
- char *pRequestMethod; /* METHOD屬性值 */
- setvbuf(stdin,NULL,_IONBF,0); /*關閉stdin的緩衝*/
- printf("Content-type:text/html\n\n"); /*從stdout中輸出,告訴Web伺服器返回的資訊型別*/
- printf("\n"); /*插入一個空行,結束頭部資訊*/
- printf("<p>hello test</p>");
- /* 從環境變數REQUEST_METHOD中得到METHOD屬性值 */
- pRequestMethod = getenv("REQUEST_METHOD");
- if(pRequestMethod==NULL)
- {
- printf("<p>request = null</p>");
- return 0;
- }
- if (strcasecmp(pRequestMethod,"POST")==0)
- {
- printf("<p>OK the method is POST!\n</p>");
- p = getenv("CONTENT_LENGTH"); //從環境變數CONTENT_LENGTH中得到資料長度
- if (p!=NULL)
- {
- ContentLength = atoi(p);
- }
- else
- {
- ContentLength = 0;
- }
- if (ContentLength > sizeof(InputBuffer)-1) {
- ContentLength = sizeof (InputBuffer) - 1;
- }
- i = 0;
- while (i < ContentLength)
- { //從stdin中得到Form資料
- x = fgetc(stdin);
- if (x==EOF)
- break;
- InputBuffer[i++] = x;
- }
- InputBuffer[i] = '\0';
- ContentLength = i;
- DecodeAndProcessData(InputBuffer); //具體譯碼和處理資料,該函式程式碼略
- }
- elseif (strcasecmp(pRequestMethod,"GET")==0)
- {
- printf("<p>OK the method is GET!\n</p>");
- p = getenv("QUERY_STRING"); //從環境變數QUERY_STRING中得到Form資料
- if (p!=NULL)
- {
- strncpy(InputBuffer,p,sizeof(InputBuffer));
- DecodeAndProcessData(InputBuffer); //具體譯碼和處理資料,該函式程式碼略
- }
- }
- printf("<HEAD><TITLE>Submitted OK</TITLE></HEAD>\n");//從stdout中輸出返回資訊
- printf("<BODY>The information you supplied has been accepted.</BODY>\n");
- return 0;
- }
- int DecodeAndProcessData(char *input) //具體譯碼和處理資料
- {
- // 補充具體操作
- return 0;
- }
相關推薦
CGI程式中POST和GET訊息的處理
資料傳送格式 當用戶填完表格並按了SUBMIT按鈕後,Web瀏覽器並非將使用者所填的資料直接送給Web伺服器, 而先要經過一定的編碼處理。 Web瀏覽器總是將資料按照“變數名=變數值”這樣的資料對格式進行編碼,並且每對資料之間 用一個&符號相連線。其中“變數名”
AJAX - Http 中 post 和 get 的區別
安全 ext tex 不同方法 per 信息 行修改 進行 TE HTTP: post 和 get 是 HTTP 協議中的兩種方法。瀏覽器和服務器的交互是通過 HTTP 協議執行的,他的全稱為Hyper Text Transfer Protocol(超文本傳輸協議)。HTT
HTTP中post和get傳參的區別
插一下別的知識:HTTP的請求方式 HTTP一共有8中請求方式:1.OPTIONS 2.HEAD 3.GET 4.POST 5.PUT 6.DELETE
Jmeter中post和get請求的區別(五)
POST和GET的區別 1、原理不同: 一般我們在瀏覽器輸入一個網址訪問網站都是GET請求;post請求引數放在body data中。get多少次都不會改變頁面呈現的資料,post會。 2、資料量 GET傳送的資料量較小,不能大於2KB。POST傳送的資料量較大,一般預設為不受
ApacheHttpClient中post和get的請求
ApachehttpClient是谷歌官方的http請求,Eclipse自帶有,但是AS好像沒有(還是我的AS版本問題)。它比httpURLConnection請求更簡單。 post請求相對get就是引數有變化 public class MainActi
springmvc中Post和get亂碼的解決
第一種方法依賴於tomcate6中webapps\examples\WEB-INF\classes\filters下SetCharacterEncodingFilter這個類 實現方法在web.xml 中新增以下程式碼 <filter> <filter
Android中post和get的提交方式【三種】
向伺服器提交資料有兩種方式,post和get。兩者的區別主要有三點,安全性、長度限制、資料結構。其中get請求安全性相比較而言較差,資料長度受瀏覽器位址列限制,沒有方法體。兩種都是較為重要的資料提交方式。現簡單介紹一下三種post和get的提交方式。無論是哪種方法實現post和get,get 的訪問路徑都
淺析HTTP中POST和GET區別並用Python模擬其響應和請求
最近在幾周在做手遊崩潰資訊收集和上傳,拿到崩潰資訊後,使用的是HTTP的POST方法上傳到公司共用的伺服器的,因此做簡單總結。本文首先簡單介紹了HTTP協議,主要說明了POST方法和GET方法的區別;然後用Python實現了 對POST方法和GET方法的響應;最後用
http中post和get的區別
GET和POST是HTTP協議中的兩種傳送請求的方法。HTTP是基於TCP/IP的關於資料如何在全球資訊網中如何通訊的協議。所以GET和POST的底層都是TCP/IP,也就是說,GET/POST都是TC
JSP 處理 POST和GET請求
例如 enc utf get post character 頁面 odi .get JSP頁面接受post請求,如果請求的參數值裏包含非西歐字符,首先需要調用 request.setCharacterEncoding("UTF-8"); 如果是GET請求,不能這樣做,可先獲
C++使用libcurl做HttpClient(業務觀摩,用C++封裝過程式代碼,post和get的數據,最好url編碼,否則+會變成空格)good
com 如果 msvc 是否 out tle source rac 無需 當使用C++做HTTP客戶端時,目前通用的做法就是使用libcurl。其官方網站的地址是http://curl.haxx.se/,該網站主要提供了Curl和libcurl。Curl是命令行
CGI編程中POST、GET詳解
cgi編程中post、get詳解什麽是 HTTP?超文本傳輸協議(HTTP)的設計目的是保證客戶機與服務器之間的通信。HTTP 的工作方式是客戶機與服務器之間的請求-應答協議。web 瀏覽器可能是客戶端,而計算機上的網絡應用程序也可能作為服務器端。舉例:客戶端(瀏覽器)向服務器提交 HTTP 請求;服務器向客
Android中HTTP Post和Get請求
簡單的隨手記,適合初學者使用,現在網路請求比較流行使用OKHttp,後期部落格會寫到如何使用。 在AndroidManifest加入以下許可權 <uses-permission android:name="android.permission.INTERNET" />
Post 和 get 請求亂碼問題處理
原始處理get post 請求亂碼 String newEncoding = new String( params.getBytes("iso-8859-1") , "utf-8" ); 原理分析 post 處理亂碼方式 req.setCharac
PHP專案中使用Guzzle執行POST和GET請求
以往在專案中要用到第三方介面時會用到封裝好的curl執行請求,現在有了更好的解決方案——Guzzle。 下面是官方介紹: Guzzle是一個PHP的HTTP客戶端,用來輕而易舉地傳送請求,並整合到我們的WEB服務上。 介面簡單:構建查詢語句、POST請求、分流
防止通過POST和GET方法SQL注入的兩個最徹底過濾程式
先針對POST遞交上來的資訊過濾程式 Public Function filterStr(str) str=replace(str,CHR(59),";") '“;” str=replace(str,CHR(38),"&") '“&”
HttpClient Post和Get請求例項+ 中文引數處理
import java.io.IOException; import java.net.URLEncoder; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclie
淺談 POST 和 GET 在 Web中的應用
Http定義了與伺服器互動的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,我們可以這樣認為:一個URL地址,它用於描述一個網路上的資源,而HTTP中的GET,POST,PUT,DELETE就對應著對這個資源的查,改,
php中通過post和get傳遞陣列的方法
1.php中通過post方式傳遞陣列 將input中的name屬性寫為xx[]形式。 eg <form action="" > <input type="text" name="myname[]"> <input type="text" na
C++MFC程式設計筆記day01 MFC介紹、建立MFC程式和重寫訊息處理
一、MFC概念和作用 1、全稱Microsoft Foundation Class Library,我們稱為微軟基礎類庫,封閉了絕大部分的win32 Api函式,C++語法中的資料結構,程式的執行流程MFC就是一個庫(動態庫,靜態庫)MFC還是一個程式框架 2、為什麼使用M