BOA学习记录总结
来源:互联网 发布:数控编程帅气宝塔图纸 编辑:程序博客网 时间:2024/05/16 10:05
题目:架设好了boa-0.94.13,编写了一个简单的表单html,和c语言cgi,
运行报“502 Bad Gateway The CGI was not CGI/1.1 compliant.”错误
1、HTML文件
<html>
<head>
<title>form</title>
</head>
<body>
<form name="myform" method="post" action="/cgi-bin/cgi_test.cgi">
name:<input type="text" name="x"/><br/>
pass:<input type="text" name="y"/><br/>
<input type="submit" value="input"/>
<input type="reset" value="reset"/>
</form>
</body>
</html>
<head>
<title>form</title>
</head>
<body>
<form name="myform" method="post" action="/cgi-bin/cgi_test.cgi">
name:<input type="text" name="x"/><br/>
pass:<input type="text" name="y"/><br/>
<input type="submit" value="input"/>
<input type="reset" value="reset"/>
</form>
</body>
</html>
2、C语言cgi文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int length;
char * method;
char *inputstring;
char *inputstring2;
char *inputstring3;
char *inputstring4;
inputstring=getenv("CONTENT_TYPE");
inputstring2=getenv("QUERY_STRING");
inputstring3=getenv("CONTENT_LENGTH");
method=getenv("REQUEST_METHOD");
if(method==NULL)
{
printf("no call by serv\n");
return 1;
}
if(!strcmp(method,"POST"))
{
length=atoi(getenv("CONTENT_LENGTH"));
if(length!=0)
{
inputstring4=malloc(sizeof(char)*length+1);
fread(inputstring4,sizeof(char),length,stdin);
}
}else if(!strcmp(method,"GET")){
inputstring4=getenv("QUERY_STRING");
length=strlen(inputstring4);
}
printf("Content- type:text/html\r\n\r\n");
printf("<html>");
printf("<p>");
printf(getenv("CONTENT_TYPE"));
printf(inputstring4);
printf("</p>");
printf("<p>");
printf("Hello cgi!");
printf("send data method:%s,content_type:%s,query_string:%s,content_length:%s\n",method,inputstring,inputstring2,inputstring3);
printf("</p>");
printf("</html>");
return 0;
}
3、问题解决思路
参考各位前辈的经验,依次试了这三种方法
(1) 改变CGI程序的权限 chmod 755 ***.cgi
(2) CGI程序中写头的时候不能丢了 “\n\r\n” 两个换行符! printf("Content-type:text/html\n\r\n");
(3) 这个方法得以解决:
1:修改boa代码cgi.c,在 complete_env 函数中添加环境变量
my_add_cgi_env(req, "LD_LIBRARY_PATH", "/lib"),然后重新make即可;
2:编译时加入一个参数,具体如下:
gcc -static test.c -o test.cgi
my_add_cgi_env(req, "LD_LIBRARY_PATH", "/lib"),然后重新make即可;
2:编译时加入一个参数,具体如下:
gcc -static test.c -o test.cgi
4、总结
(1)最早表单form中文本框没有赋“name=”值,导致无论是get、post方法都只能收到REQUEST_METHOD变量的值,get方法地址栏?号后面是空白。必须得给它们命名
(2)编译时加静态-static选项文件大小扩大100倍,有60多兆。
(3)感觉是my_add_cgi_env(req, "LD_LIBRARY_PATH", "/lib")起了作用,pc改了以后再pc上可以顺利运行,但开发板未改,交叉编译至开发板后上述问题依然存在
(4)get方法对应的CONTENT_TYPE,CONTENT_LENGTH变量均为空,post方法对应的QUERY_STRING变量为空。
阅读全文
0 0
- BOA学习记录总结
- BOA学习记录2
- 编译boa过程记录
- 学习总结记录
- 汇编学习总结记录
- 汇编学习总结记录
- 手势学习总结记录
- git学习总结记录
- Python学习记录总结
- Boa----Perl语言的学习
- centos+php+boa安装配置操作记录
- boa
- boa
- C++学习总结概要记录
- FFMPEG学习记录及总结
- C++语言学习记录总结
- C语言学习记录总结
- boa-0.94.13编译和学习
- mysql基础语法(自己整理的)
- swoole:swoole_async_writefile和onManagerStart遇到的一个问题记录
- 硬链接link、符号链接symlink、解除链接unlink
- DC-DC与LDO电压变换
- 输出唯一的一个不同的数字
- BOA学习记录总结
- 【算法】算法图解
- 1-3 数组的反序输出
- RK3399 六核64-Bit 核心板
- //数组中只重复一次的数字
- visual studio code and unity||mac 下使用visual studio 调试unity代码
- 源代码下载网址
- KMP算法next计算
- 学习笔记