CGI编程小例子

URL编码:
变量之间用&分开
变量与其对应值用=连接
空格符用+代替
控制字符用%接对应的16进制ASCII码代替
空格及不能打印的ASCII码是非法字符


getenv("REQUEST_METHOD");
可以得到POST 或者 GET;
POST通过CONTENET_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 \n\n");  
printf("<TITLE>WIFI Status</TITLE>");  
printf("<H3>WIFI Status</h3>");
reqmth = getenv("REQUEST_METHOD");
printf("REQUEST_METHOD: %s\n",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 !\n",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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值