cgi如何提取表單post的特殊子串

2021-08-26 06:54:04 字數 1462 閱讀 7830

【問題】用c編寫cgi程式如何取出html表單post來的資料?

【分析】html表單post來的資料形如username="zhang"&&password="123456"&&useid="012"

【方法1】

#include #include #include char* getcgidata(file* fp, char* requestmethod); int main() name[j++] = input[i]; } for ( i = 19 + strlen(name), j = 0; i < (int)strlen(input); i++ ) pass[j++] = input[i]; } for ( i = 30 + strlen(pass)+ strlen(name), j = 0; i < (int)strlen(input); i++ ) userid[j] = '\0'; printf("your username is %s

your password is %s

your userid is %s

\n", name, pass,userid); return 0; } char* getcgidata(file* fp, char* requestmethod) else if (!strcmp(requestmethod, "post")) while(1) --len; if (feof(fp) || (!(len))) i++; } } return null; }

【方法2】

1 先將post來的資料整體讀入info

char *info=null; char username[64]; char passwd[64]; int userid; int lenstr=0; memset(username,0,64); memset(passwd,0,64); userid=0; /* * get the data by post method from index.html */ lenstr=atoi(getenv("content_length")); info=(char *)malloc(lenstr+1); fread(info,1,lenstr,stdin);

2將info作為檔案流輸入,利用sscanf提取子串

sscanf(info,"username=%[^&]&passwd=%[^&]&userid=%d",username,passwd,&userid); free(info);

注:如果資料為實型,則利用sscanf時,要加上&,如上例userid

【思考】如果子串為username=zhang; passwd=123; userid=012,如何用【方法2】提取?

sscanf(info,"username=%[^;]; passwd=%[^;]; userid=%d",&username,&passwd,&userid);

注意:將%[^&]&替換為%[^;];。通過本例,可以明白%[^;];的用法。

【解析】%[^&]是正規表示式,詳細請參考:

CGI例項 表單GET與POST示例

cgi例項 表單get與post示例 get方法 做乙個加法運算,需要接收兩個引數 檔案get.c如下 include include int main void else printf printf printf n printf n printf n return 0 post方法 做乙個乘法運...

http與CGI的測試之POST的方式。

在httprequester發出post時,可以由兩種返回引數 提交引數 的方式。1是在url裡 2是在content裡。如下圖 在cgi中進行接收時,對兩種方式的接收方式也不一樣。url後面的引數由http伺服器放到全域性變數query string裡帶給cgi.content裡的則由http伺服...

使用sklearn提取文字的tfidf特徵

from sklearn.feature extraction.text import countvectorizer,tfidfvectorizer,tfidftransformercorpus this is the first document.this is the second secon...