在CGI(C代码)中未获得QUERY_STRING

时间:2015-06-11 08:56:02

标签: html c ajax cgi lighttpd

我正在使用lighttpd服务器。并尝试在C中编写示例CGI并将HTML返回到服务器。 我对CGI的ajax调用是

    <head>
            <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
            <title>Watch TV</title>
            <script src="js/jquery.js"></script>
            <script type="text/javascript">
            function myTest(){
                    $.ajax({
        type: 'GET',
        url: "http://10.47.5.158:50080/htmldiag/cgi-bin/test.cgi",
        async: true,
        data: {'m':2, 'n':3},
        dataType: "html",

        success: function(data) {
            console.log("Entered success case------------------------", data);
        },
        error: (function(msg, url, ln) {
            console.log("Entered error case------------------------", msg, url, ln);
        })
    });
            }
            </script>
    </head>

我的CGI是

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *data;
long m,n;
printf("%s%c%c\n",
"Content-Type:text/html",13,10);
printf("Access-Control-Allow-Origin: *");
printf("<!DOCTYPE html><html>\n");
printf("<HEAD><TITLE>Multiplication results</TITLE></HEAD>\n");
printf("<BODY><H3>Multiplication results</H3>\n");
data = getenv("QUERY_STRING");
if(data == NULL)
  printf("<P>Error! Error in passing data from form to script.");
else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2)
  printf("<P>Error! Invalid data. Data must be numeric.");
else
  printf("<P>The product of %ld and %ld is %ld.",m,n,m*n);
printf("</BODY></HTML>\n");
return 0;
}

我也尝试过从URL提供参数。我无法获得QUERY_STRING,或以HTML格式获取响应。我得到的只是它在成功案例中输入的日志和控制台中的整个cgi文件。

1 个答案:

答案 0 :(得分:0)

非常简单,

环境变量QUERY_STRING设置为查询字符串。 你可以通过这个电话来获取它:

char *query = getenv("QUERY_STRING");

注意getenv的手册页并注意返回的字符串 可以静态分配。 (不要犹豫使用strdup和free)。