BOA学习记录总结

题目:架设好了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>
2、C语言cgi文件
#include<stdio.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  

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变量为空。





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值