cgi程序实例

本文深入探讨了CGI(Common Gateway Interface)程序的工作原理,通过实例展示了如何创建一个简单的CGI应用。内容包括CGI的概念、CGI脚本语言的选择、环境变量的使用以及如何处理HTTP请求和响应。通过学习,读者将能够理解CGI在动态网站中的作用,并具备编写基本CGI程序的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<style type="text/css">
        .container {
		/* background-color: gray; */
            width: 500px;
			height:500px;
			position:absolute;
			left:50%;
			margin-left:-250px;
			top:50%;
			margin-top:-190px
           /* 整个大的div的长度*/
        }
	.input {
    /* position: absolute; */
     font-size: 15px;
	height:30px;
	width: 500px;
   /*  right: 0;
    top: 0;
    opacity: 0;
    filter: alpha(opacity=0);
    cursor: pointer */
}
.btton{
 font-size: 20px;
	height:30px;
	width: 90px;
}
	 </style>
</head>
<body>  
<div class="container">
    <form method=get action="http://localhost/cgi-bin/test2.cgi">  
       url的值:<input class="input" id="result1" type="text" name="i1" value="点击获取按钮获得参数"/>
	   <p></p>
       bck_url的值:<input class="input" id="result2" type="text", name="i2" value="点击获取按钮获得参数"/>  
	    <p></p>
	    <p></p>
	   <input class="btton" id="modify" type='button' name="callcpp" value="获取参数" οnclick="resCalc();"  />
	    <input class="btton" type="submit"/>  
     </form>  
</div>


<h2>获得cgi程序的返回值</h2>
<button type="button" οnclick="loadXMLDoc()">返回数据</button>
<div id="myDiv"></div>

<script type="text/javascript">
        function UrlSearch() {
            var name, value;
            var str = "http://www.example.com/number_checking?{'url':'http://ovuhjq3qc.bkt.clouddn.com/2017-11-1617:20:22-920-.png','bkg_url':'http://ovuhjq3qc.bkt//.clouddn.com/2017-11-1617:20:22-921-.png'}"
			// var str = "http://www.example.com/number_checking?{'url':'htt/povuhjq3qc','bkg_url':'httpovuhjq3qc1'}"
            var num = str.indexOf("?")
            str = str.substr(num + 1); //取得所有参数   stringvar.substr(start [, length ]
            str = str.substring(1, str.length - 1);
            var arr = str.split(","); //各个参数放到数组里
            for (var i = 0; i < arr.length; i++) {
                num = arr[i].indexOf(":");
                if (num > 0) {
                    //name=arr[i].substring(0,num);
                    name = arr[i].substring(1, num - 1);
                    value = arr[i].substr(num + 1);
                    value = value.substring(1, value.length - 1);
                    this[name] = value;
                }
            }
        }
        var Request = new UrlSearch(); //实例化
        // var draw_image=Request.draw_image;
        var url = Request.url;
        var bkg_url = Request.bkg_url;
    </script>
<script type="text/javascript">
function resCalc()
{
var input1=document.getElementById("result1");
var input2=document.getElementById("result2");
var btn=document.getElementById("modify");
  //  alert(url);
	//var str="http://www.baidu.com";
	input1.value=url;
	//input1.value="677";
	input2.value=bkg_url;
	//input2.value="78";

   alert("已获得参数值,请点击提交按钮进行提交数据");

 } 
</script>
<!-- 获得cgi程序的返回值 -->
<script type="text/javascript">
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    { 
		//VAR RESPONSEtEXT = XMLHTTP.RESPONSEtEXT;
		                        //         IF (RESPONSEtEXT){
		                       //               ALERT(RESPONSEtEXT);//SHOWiNFO("USERNAME_NOTICE",RESPONSEtEXT);
		                      //           }
		                      //   }ELSE{
		                      //           ALERT("ERROR!");
		                     //    }
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
	var getStr=xmlhttp.responseText;
	//alert(getStr);
            var param = getStr;
            var href = "http://www.baidu.com?param=" + param;
            alert(href);
    }
  }

 // var url11="/cgi-bin/test2.cgi?i1=http%3A%2F%2Fovuhjq3qc.bkt.clouddn.com%2F2017-11-1617%3A20%3A22-920-.png&i2=http%3A%2F%2Fovuhjq3qc.bkt%2F%2F.clouddn.com%2F2017-11-1617%3A20%3A22-921-.png";
 //  var url11="/cgi-bin/test2.cgi";
xmlhttp.open("GET","/cgi-bin/test2.cgi",true);
xmlhttp.send();
}
</script>

</body>  

</html>






#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>  
#include <stdlib.h>  
#include<string.h>
//字符串替换
int StrReplace(char strRes[], char from[], char to[]) {
int i, flag = 0;
char *p, *q, *ts;
for (i = 0; strRes[i]; ++i) {
if (strRes[i] == from[0]) {
p = strRes + i;                         //p为从替换的第一个字符开始后面所有的字符串,例如you are cute,are换成is,p为are cute
//printf(p);
q = from;
while (*q && (*p++ == *q++));
if (*q == '\0') {
ts = (char *)malloc(strlen(strRes) + 1);  //malloc函数用于向操作系统申请内存,声明在stdlib.h中, 
                                        //并将指针转换为char *类型赋值给ts,申请的大小为(strlen(strRes) + 1)。
strcpy(ts, p);                           //字符串复制,p为cute
strRes[i] = '\0';
strcat(strRes, to);                  //字符串链接,strRes为"you ",设strRes[i] = '\0';即是把后面的截断
strcat(strRes, ts);
// printf("strRes2%s\n", strRes);
free(ts);
flag = 1;
}
}
}
return flag;
}
char* main()
{
//设置HTML语言  
printf("Content-type:text/html\n\n");


//int i1, i2;//定义2个变量用于接收传递的参数 
char i1[100], i2[100];
//int i2;//定义2个变量用于接收传递的参数 


  //使用环境变量获得传递的参数  
char* queryString = getenv("QUERY_STRING");
// printf("%s", queryString);
//把一个字符串解析到另一个字符串中  
//将获得的字符串中的%s打印到cName中  
//sscanf("12345+acc", "%[^&]", &i1);
//sscanf(queryString, "i1=%s&i2=%s", &i1, &i2);
/*for (int i = 0; queryString[i]!= '\0'; i++) {
if (queryString[i] == '%') {
queryString[i] = '*';
}
}*/
StrReplace(queryString, "%2F", "/");
StrReplace(queryString, "%3A", ":");
//printf("%s", queryString);
sscanf(queryString, "i1=%[^&]&i2=%s", &i1, &i2);
//printf("<br><br>");
//printf("%s", i1); 
//printf("<br><br>");
//printf("%s", i2);
//printf("%d+%d=%d", i1, i2, i1 + i2);


//printf("%s", queryString);
char* str = "{hdfskehtierjksdf}";
printf("%s", str);
return str;


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值