`
helloyesyes
  • 浏览: 1323001 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

c语言之cgi实例

阅读更多

CGI是Common Gateway Interface的缩写,翻译成中文就是通用网关接口,它是网页的后台处理程序,运行在服务器端上,可以用多种语言书写,最常用的就是Perl(因为Perl有强大的字符串处理功能,而CGI程序经常要处理许多的字符串)。举个例子来说,通常一般的论坛或邮箱等都需要注册,需要用户输入用户名和密码,首先给你一个静态的页面,上面有两个文本框,要求你输入用户名和密码,还有一个提交和重置的按钮,用于提交用户的输入,当用户点击提交按钮时,这个请求就被发送到服务器端,服务器上的CGI程序就会解析用户的输入,并且验证用户的输入是否合法,是否被通过验证等。下面看一个非常简单的例子,代码是最好的解说:

<html>
<head><title>用户登陆验证</title></head>
<body>
<form name="form1" action="/cgi-bin/output.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">密&nbsp;&nbsp;码</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>

-------------------------以下是cgi处理程序的源码----------------------------

/* output.c */

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

char* getcgidata(FILE* fp, char* requestmethod);

int main()

{

char *input;

char *req_method;

char name[64];

char pass[64];

int i = 0;

int j = 0;

// printf("Content-type: text/plain; charset=iso-8859-1\n\n");

printf("Content-type: text/html\n\n");

printf("The following is query reuslt:<br><br>");

req_method = getenv("REQUEST_METHOD");

input = getcgidata(stdin, req_method);

// 我们获取的input字符串可能像如下的形式

// Username="admin"&Password="aaaaa"

// 其中"Username=""&Password="都是固定的

// "admin""aaaaa"都是变化的,也是我们要获取的

// 前面9个字符是UserName=

// "UserName=""&"之间的是我们要取出来的用户名

for ( i = 9; i < (int)strlen(input); i++ )

{

if ( input[i] == '&' )

{

name[j] = '\0';

break;

}

name[j++] = input[i];

}

// 前面9个字符 + "&Password="10个字符 + Username的字符数

// 是我们不要的,故省略掉,不拷贝

for ( i = 19 + strlen(name), j = 0; i < (int)strlen(input); i++ )

{

pass[j++] = input[i];

}

pass[j] = '\0';

printf("Your Username is %s<br>Your Password is %s<br> \n", name, pass);

return 0;

}

char* getcgidata(FILE* fp, char* requestmethod)

{

char* input;

int len;

int size = 1024;

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;

}

上面的第一个是一个静态html页面,要求用户输入用户名和密码,当户输入之后,点击“登录”按钮,则用户的输入就被提交到服务器,由output.cgi来处理,在这里,只是作为一个演示,output.cgi把用户的输入显示在页面上。

操作提示:将第一段HTML代码拷贝到一个文本文件,另存为login.htm,注意扩展名要用htm或者html,第二段代码是c语言源代码,笔者在VC++6.0下编译通过,生成文件为output.exe,将其改名为output.cgi,login.htm放在网站的目录,output.cgi放在网站的cgi-bin目录。笔者用的是Apache服务器,将login.htm放在了htdocs下面,将output.cgi放在了cgi-bin目录。在浏览器输入
http://127.0.0.1/login.htm
就会出现

用户名
密码

这样页面,当用户输入了用户名和密码之后,点击“登录”按钮,就会出现下面的页面
The following is query reuslt:

Your Username is admin
Your Password is admin888

这里我们假设在用户名文本框里输入的是"admin",在密码框里输入的是"admin888"。
需要说明是要在本机上运行该cgi程序,需要装支持cgi的Web服务器,最常见的免费Web服务器就是apache,这个很容易下载到。安装之后,基本不需要做任何的配置,把login.htm放在htdocs目录下面,把output.cgi放在cgi-bin目录下,启动web服务器后,就可以解释cgi程序了。

笔者也刚接触,写的很粗糙,如有不适之处,望广大网友批评指正。

http://blogold.chinaunix.net/u/5391/showart_265981.html

分享到:
评论

相关推荐

    c语言开发的cgi简单论坛源码

    这个项目是学习CGI编程和C语言结合的理想实例,因为它提供了对用户管理、发布主题和回帖功能的基本实现。 【CGI简介】: CGI是一种标准,允许Web服务器与外部程序交互,以动态生成网页内容。这种交互使得服务器能够...

    用C语言进行CGI程序设计.doc

    下面是一个简单的C语言CGI程序示例,它接收并输出HTML表单的数据: ```c #include #include int main() { int i, n; printf("Content-type:text/plain\n\n"); n = 0; if (getenv("CONTENT_LENGTH")) { n =...

    c语言 cgi 示例

    C语言CGI程序的核心部分通常包括以下步骤: 1. **环境变量解析**:CGI程序首先需要获取来自HTTP请求的环境变量,如QUERY_STRING(GET方法传递的参数)、REQUEST_METHOD(GET或POST请求类型)和CONTENT_TYPE(POST...

    嵌入式系统C语言CGI设计与应用.pdf

    文章通过实例演示了如何在ARM平台上使用C语言CGI实现远程控制。ARM平台由于其高性能和低能耗的特点,被广泛应用于嵌入式设备中。在这个实例中,可能涉及的操作包括读取传感器数据、控制GPIO(通用输入输出)引脚状态...

    嵌入式web服务器boa_C语言/Python + HTML + javascript + ajax 代码实例例子

    C语言 CGI实例 http://blog.csdn.net/ajrm0925/article/details/8810342 http://blog.csdn.net/liang890319/article/details/6277900 http://blog.csdn.net/gnefniu/article/details/42432657 上传文件: ...

    cgi http实例代码

    这个实例是用C语言实现的HTTP服务器,名为tinyhttpd,它支持CGI功能。让我们深入探讨CGI和如何在C语言中实现HTTP服务器。 **CGI的基本原理:** CGI为Web服务器提供了一个接口,当用户请求动态内容时,服务器会启动...

    CGI编程指南.pdf

    总体而言,《CGI编程指南》一书通过理论与实例相结合的方式,系统地讲解了CGI编程的各个方面,旨在帮助读者掌握CGI编程的基础知识,并能够将这些知识应用到实际的项目中。书中内容从CGI的基本概念到具体的编程技术,...

    cgi_test.tar.gz_CGI linux_cgi_cgi unix_cgi工程_web arm

    在本资源"cgi_test.tar.gz"中,包含了一个基于C语言编写的CGI程序实例,这对于理解和开发CGI应用程序非常有帮助。这个压缩包特别针对Linux和Unix环境,同时考虑到了在Web服务器上的应用,尤其是对于嵌入式系统如ARM...

    BOA+CGI测试例程.rar_CGI arm_arm cgi_boa_boa cgi_cgi boa

    在这个例子中,我们看到有“gpio_test.c”和“gpio_cgi.c”,它们可能是用C语言编写的CGI程序,用于处理GPIO(General Purpose Input/Output)相关的请求。GPIO是微控制器上常见的接口,用于控制硬件引脚的输入和...

    Linux_CGI编程

    #### 示例:C语言CGI程序实例 以下是一个使用C语言编写的简单CGI程序示例,用于处理乘法运算的HTML表单: ```c #include #include int main(void) { char *data; long m, n; // 输出HTTP头信息 printf(...

    基于sqlite3数据库的CGI源码

    CGI(Common Gateway Interface,通用...这个源码可以作为一个学习实例,通过阅读和调试,可以深入了解CGI和SQLite3的交互细节。同时,它也可以作为一个基础,进一步扩展成更复杂的功能,例如用户认证、事务处理等。

    html和cgi程序

    在这个压缩包中,可能包含的是用C语言编写的CGI源程序,用于处理来自Web端的请求,比如获取摄像头数据、控制LED状态或者修改开发板时间。 **Web端功能实现:** 1. **查看摄像头图片**:这通常涉及到Web服务器接收...

    cgi.rar_CGI linux_cgi_cgi post_cgi post g_windows cgi post g

    在这个“cgi.rar”压缩包中,包含了一个关于CGI编程的实例,特别是关于在Linux环境下的CGI应用以及CGI处理POST和GET请求的方法。这个例子对于学习如何在不同的操作系统,如Windows,使用CGI技术非常有帮助。 首先,...

    linux-cgi.rar_CGI js_CGI linux_Linux下cgi开发_linux http cgi_linux

    CGI(Common Gateway Interface,通用网关接口)是Web服务器与外部程序进行通信的一种标准协议,使得动态网页的生成成为...同时,这个乘法计算器的实例提供了一个实践CGI编程的简单案例,有助于加深对CGI原理的理解。

    C语言数据输入与输出实例详解

    C语言中的数据输入与输出是程序的基本操作,主要包括使用`scanf()`和`printf()`这两个标准库函数。`scanf()`用于从输入源读取数据,如键盘、文件或网络,而`printf()`则负责将处理后的数据输出到目标,如显示器、...

    使用cgic來寫cgi的範例檔

    总的来说,这个压缩包提供了一个实践CGIC库的实例,对于想要学习或改进CGI编程技能的开发者来说,这是一个宝贵的学习资源。它涵盖了CGIC库的使用,HTTP协议的理解,以及C语言编写CGI程序的技巧。通过研究这个示例,...

    WebServer-cgi

    【WebServer-cgi】是一个关于Web服务器与CGI(Common Gateway Interface)交互的实例项目,旨在帮助开发者理解和实践Web服务器如何处理动态内容。CGI是一种标准,允许Web服务器执行外部程序(如脚本或应用程序),并...

    C++经典学习实例2 .

    实例113讲解了用C语言进行CGI(Common Gateway Interface)程序设计。CGI是Web服务器与外部程序交互的标准,使得动态网页生成成为可能。C++程序员了解CGI的基本原理和实践,可以为Web应用开发打下基础。 实例104是...

    cgictest.rar_cgi compiler_cgic

    总的来说,"cgictest.rar_cgi compiler_cgic" 提供了一个使用CGIC库的自编译CGI程序,它支持执行SHELL命令,可以作为学习CGI编程和了解CGIC库使用的一个实例。在实际部署时,必须注意安全问题,避免潜在的命令注入...

    c_menu_routine.rar_C语言程序_c me_c routine_c_menu_routine_菜单 C语言

    "c_menu_routine.rar"压缩包包含的资源正是关于这一主题的,提供了C语言中实现菜单功能的实例。下面将详细讨论C语言中创建菜单的方法及其相关知识点。 首先,菜单通常由一系列选项组成,这些选项被组织成结构化的...

Global site tag (gtag.js) - Google Analytics