goahead(嵌入式Web服务器)之cgi篇

cgi路径配置:
在route.txt文件里的route uri=/cgi-bin dir=根路径 handler=cgi
设置根路径,最终的路径为:根路径/cgi-bin,如设置根路径为/mnt/nfs/goheah12/,则cgi文件存放的路径为/mnt/nfs/goheah12/cgi-bin。

网页文件创建,命名为update.html内容如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>用户登陆验证</title>
</head>
<body>
<form name="form1" action="/cgi-bin/main.cgi" method="POST">
<table align="center">
<tr><td align="center" colspan="2"></td></tr>
<tr>
<td align="right">用户名</td>
<td><input type="text" name="Username"></td>
</tr>
<tr>
<td align="right">密 码</td>
<td><input type="password" name="Password"></td>
</tr>
<tr>
<td><input type="submit" value="登 录"></td>
<td><input type="reset" value="取 消"></td>
</tr>
</table>
</form>
</body>
</html>

注:action="/cgi-bin/main.cgi" 这个最终会调用main.cgi

cgi函数构建
mian.c文件,内存如下:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>

int main(void)
{
	//printf("Content-type:text/html\n\n"); //这句一定要加上
	fprintf(stdout, "Content-Type: text/html\r\n\r\n");
	
	char name[128];
	char passward[128];
	char buf[128];
	char *data;
	int len,i,m,n;
	char *method;
	
	
	method = getenv("REQUEST_METHOD");
	printf("method = %s\n",method);
	
	memset(name , 0 , sizeof(name));
	memset(passward , 0 , sizeof(passward));
	
	fscanf(stdin, "Username=%[^&]&Password=%s",name,passward);
	if(name[0] == '\0' || passward[0] == '\0')
		printf("name or passward error!");
	else
		printf("name=%s passward=%s\n",name , passward );
	fprintf(stderr, "passward = %s\n",passward);
	fprintf(stderr, "name = %s\n",name);
	len = atoi(getenv("CONTENT_LENGTH"));
	fprintf(stderr, "len = %d\n",len);
	fprintf(stdout, "$STATE$=1");
	return 0;
}

通过交叉编译,生成main.cgi文件,例如:
arm-himix200-linux-gcc -o main.cgi main.c

cgi文件的拷贝
将main.cgi文件放在cgi的存放路径,上面的cgi路径配置中讲到

网页文件的拷贝
将update.html文件放在目标文件goahead的相同目录上。

测试例子:
在网页上输入:http://10.82.16.61/update.html
在这里插入图片描述
点击登录后,网页会回复一下界面:

在这里插入图片描述
总结:cgi文件和网页文件的存放路径的设置不一样,要留意。

猜你喜欢

转载自blog.csdn.net/weixin_40732273/article/details/107835028
今日推荐