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
変数間で&分ける
変数とその対応する値を=で接続
スペース記号を+で置換
制御文字は%接対応の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;
}