【問題】用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...