CGIプログラミングの小例

2104 ワード

URLコード:
変数間で&分ける
変数とその対応する値を=で接続
スペース記号を+で置換
制御文字は%接対応の16進ASCIIコードで代用
スペースおよび印刷できないASCIIコードは不正な文字です
getenv("REQUEST_METHOD");
POSTまたはGETを得ることができる.
POSTはCONTENNETを通過するLENGTHは入力データ長を取得する.
環境変数:
REQUEST_METHOD
CONTENT_TYPE
CONTENT_LENGTH
POST
QUERY_STRING
GET
CONTENT_FILE
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
PATH_INFO
例,gcc-o scan.cgi scan.c
int main(int argc,char *argv[]) 
{ 
char *data;  
char *reqmth;
char key[50],value[50],buf[256],cmd[64];  
int len,i;
FILE *fp = NULL;
printf("content-key:text/html;charset=utf8 

"); printf("<TITLE>WIFI Status</TITLE>"); printf("<H3>WIFI Status</h3>"); reqmth = getenv("REQUEST_METHOD"); printf("REQUEST_METHOD: %s
",reqmth); //POST method if(strncmp(reqmth,"POST",4)==0) { len = atoi(getenv("CONTENT_LENGTH")); fread(buf,len,1,stdin); printf("<br>POST over!!,len:%d<br>Buf:%s<br>",len,buf); fp=popen("iwlist ra0 scan | grep ESSID","r"); while(fgets(buf,sizeof(buf),fp)) { printf("<br>BUF:<br>%s<br>",buf); } pclose(fp); #if 0 for(i=0;i<len;i++) { if(buf[i] == '=') { buf[i] = ' '; } if(buf[i] == '&') { buf[i] = '\0'; sscanf(data,"%s %s",key,value); printf("<br>%s = %s<br>",key,value); if(strncasecmp(key,"ssid",4) == 0) { printf("key:%s,value:%s !
",key,value); sprintf(cmd,"iwconfig wlan0 essid %s",value); system(cmd); } data = &buf[i+1]; } } #endif } //GET method else { data=getenv("QUERY_STRING"); if(data==NULL) printf("<p>Error:no data found!!!</p>"); else{ len = strlen(data); sscanf(data,"name=%[^&]&pwd=%s",key,value); printf("<p>len:%d ; name=%s</p>",len,key); printf("<p>pwd=%s</p>",value); printf("%s",data); } } return 0; }