window 下利用apache CGI 访问c程序代码
没别的缘由,就是想做一个笔记,方面以后参考使用!
需求:web后端我想用c语言来实现。(linux版的已在前面的博文中提到过了)。
一、下载window版的httpd。
下载就完了。
二、修改配置并启动httpd.
将下载的.zip解压后放到文件夹中,如:D:\apache下。
修改D:\apache\Apache24\conf\httpd.conf,Define SRVROOT 改为 Define SRVROOT "D:\apache\Apache24"。
打开cmd,cd 到D:\apache\Apache24\bin,输入httpd.exe,如果出现光标在闪,无任何消息的话,证明服务启动成功呢,不要关闭此窗口,打开浏览器,输入:http://localhost,会看到俺怕车的测试页面。
三、新建testcgi.html并保存到D:\apache\Apache24\htdocs下,添加以下内容:
<html> <head> <script type="text/javascript" src="js/jquery.min.js"></script> </head> <body> <h1>It works!hahahahhahaha~</h1> <input type="button" onclick="testcgi()" value="test"/> </body> <script type = "text/javaScript"> function testcgi(){ $.ajax({ type: 'POST', url: '../cgi-bin/test.exe', data:"hello world", dataType: "text", ContentType: "application/text; charset=utf-8", success: function (returnedData,status) { if(status=="success"){ alert(returnedData); } }, error: function (msg) { alert("访问失败:"+ msg); } }); } </script> </html>
三新建test.c,添加以下内容,我是借助vs2015编译成test.exe程序,并放到D:\apache\Apache24\cgi-bin下。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define MAXLEN 1024 char* getcgidata(FILE* fp, char* requestmethod); int main(void) { char * cgistr = NULL; char * req_method = NULL; printf( "Content-type: application/text;charset=utf-8\n\n" ); req_method = getenv("REQUEST_METHOD"); cgistr = getcgidata(stdin, req_method); fprintf(stdout,"you post param is %s",cgistr); } char* getcgidata(FILE* fp, char* requestmethod) { char* input; int len; int size = MAXLEN; int i = 0; if (!strcmp(requestmethod, "GET")) { input = getenv("QUERY_STRING"); return input; } else if (!strcmp(requestmethod, "POST")) { len = atoi(getenv("CONTENT_LENGTH")); input = (char*)malloc(sizeof(char)*(size + 1)); if (len == 0) { input[0] = '\0'; return input; } while(1) { input[i] = (char)fgetc(fp); if (i == size) { input[i+1] = '\0'; return input; } --len; if (feof(fp) || (!(len))) { i++; input[i] = '\0'; return input; } i++; } } return NULL; }
四、浏览器访问:http://localhost/testcgi.html 点击 test按钮,弹出
you post param is hello world.
.