0


标准c语言实现通讯录(CGI)

文章目录

自学,手打,希望多多点赞评论支持,让更多需要的人看见!——花前月

一、配置CGI运行环境——Apache下载安装

下载

阿帕奇豪斯下载 (apachehaus.com)

请添加图片描述

解压缩

在这里插入图片描述

修改配置

修改conf/httpd.conf

在这里插入图片描述

修改Apache存放路径为解压路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VBM88YgN-1654222086601)(image/image_FgPvtFEhdn.png)]

修改监听窗口为8086

修改Server Name为127.0.0.1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDaN7o2W-1654222086602)(image/image_j1lR98tbdZ.png)]

修改conf/extra/httpd-ahssl.conf和httpd-ssl.conf

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bN15fwS6-1654222086602)(image/image_ssPGE26qu5.png)]

将两个文件的443端口改为444(只要端口不被占用就行)

在这里插入图片描述

测试配置文件是否合法

httpd -t #测试配置文件是否合法

添加环境变量

启动Apache服务

1、使用管理员身份打开cmd(win+R,输入cmd,按ctrl+shift+enter打开),安装Apache服务

httpd -k install -n Apache2.4 #-n后面表示自定义访问名称

在这里插入图片描述

2、启动Apache服务

http -k start

3、查看服务是否启动成功

也可通过此处打开关闭Apache服务

4、测试——在浏览器访问http://127.0.0.1:8086,出现以下页面表示配置成功。

之后我们可以通过修改Apache24\htdocs目录下的index.html文件来更改这个初始页面。

5、停止服务

httpd -k stop   #停止

在这里插入图片描述

二、测试CGI功能

用VS2022新建一个控制台应用程序工程,在主函数中写入:

cout <<"Content-type:text/html\n\n";//告诉浏览器将以html的语法来解析此文件
cout <<"Hello world";

在这里插入图片描述

先别急着编译,我们先在工程上点右键,选择属性:

在这里插入图片描述

在配置设置-常规中,更改输出目录为cgi-bin下

在这里插入图片描述

在配置属性-高级中更改目标文件的扩展名成cgi

在这里插入图片描述

编译后,我们来到cgi-bin中,就可以看到我们编译生成好的"test.cgi"文件。

在这里插入图片描述

启动Apache服务后,在浏览器中输入localhost/cgi-bin/test.cgi就可以看到hello world了

在这里插入图片描述

只要通过printf或cout,就可以将任何html代码输出在浏览器里。而且,因为是用C/C++写的程序,所以C/C++下的一切函数,都可以用在CGI程序里。

三、向Apache中添加通信录网页

在这里插入图片描述

打开Apache\htdocs,将通讯录网页放置到文件夹中,启动Apache服务后向浏览器中输入127.0.0.1:8086。

在这里插入图片描述

通讯录网页详细代码:

<html><head><metacharset="gb2312"><!--规定 HTML 文档的字符编码--></head><body><formid="form"name="form"method="get"action="http://127.0.0.1:8086/cgi-bin/test.cgi"><!--表单数据作为 URL 变量(使用 method="get")发送--><!--action 属性定义提交表单时要执行的操作——跳转到http://127.0.0.1:8086/cgi-bin/test.cgi--><P>姓名
            <inputtype="text"id="name"name="name"/><!--文本框--></P><p>年龄
            <selectid="age"name="age"><!--下拉框--><optionvalue="18"selected="selected">18</option><optionvalue="19">19</option><optionvalue="20">20</option><optionvalue="21">21</option></select></p><P>性别
            <inputtype="radio"id="men"name="gender"value="男"/>男
            <inputtype="radio"id="women"name="gender"value="女"/>女
            <!--单选框--></P><P>手机
            <inputtype="text"id="phonenum"name="phonenum"/><!--文本框--></P><p><inputtype="submit"name="submit"value="提交"/><!--提交按钮 - 单击将尝试提交表单到服务器--></p></form></body><script>//脚本,检测输入是否合法var f = document.getElementById("form");var n = document.getElementById("name");var m = document.getElementById("men");var w = document.getElementById("women");var p = document.getElementById("phonenum");
    form.onsubmit=function(){if(n.value==''||n.value==null){alert('请填写姓名!');returnfalse;}elseif(!(m.checked||w.checked)){alert('请选择性别!');returnfalse;}elseif(p.value==''||p.value==null){alert('请填写手机号');returnfalse;}}</script></html>

测试通讯录网页

在这里插入图片描述

点击提交按钮后可在浏览器地址栏中看见URL 变量的表单数据,编码格式为gb2312。

http://127.0.0.1:8086/cgi-bin/test.cgi?name=%D5%C5%C8%FD&age=21&gender=%C4%D0&phonenum=13767898798&submit=%CC%E1%BD%BB

四、编写c语言代码

#include<stdio.h>#include<string.h>#include<stdlib.h>#defineBURSIZE2048inthex2dec(char c){if('0'<= c && c <='9'){return c -'0';}elseif('a'<= c && c <='f'){return c -'a'+10;}elseif('A'<= c && c <='F'){return c -'A'+10;}else{return-1;}}chardec2hex(shortint c){if(0<= c && c <=9){return c +'0';}elseif(10<= c && c <=15){return c +'A'-10;}else{return-1;}}voidurldecode(char url[])//url解码函数,gb2312{int i =0;int len =strlen(url);int res_len =0;char res[BURSIZE];for(i =0; i < len;++i){char c = url[i];if(c !='%'){
            res[res_len++]= c;}else{char c1 = url[++i];char c0 = url[++i];int num =0;
            num =hex2dec(c1)*16+hex2dec(c0);
            res[res_len++]= num;}}
    res[res_len]='\0';strcpy(url, res);}intmain(){char* str;char name[100], gender[100], ch[100], phonenum[100];char age[100];printf("Content-type:text/html;charset=gb2312;\n\n");//告诉浏览器将以html的语法,gb2312的编码格式来解析此文件
  str =getenv("QUERY_STRING");//获取通讯录网页提交的表单信息。if(str ==NULL)return0;if(sscanf(str,"name=%[^&]&age=%[^&]&gender=%[^&]&phonenum=%[^&]&submit=%s", name, age, gender, phonenum,ch)){//使用sscanf()函数读取相关信息(使用正则表达式)urldecode(name);//解码urldecode(age);urldecode(gender);urldecode(phonenum);
        FILE* fpWrite =fopen("data.txt","a");//打开data.txt文件,”a“表示续写内容if(fprintf(fpWrite,"%-25s%-10s%-10s%-20s\n", name, age, gender, phonenum))printf("<script>alert('非常感谢,您的数据已经被保存!'); </script>");//浏览器弹窗提示信息fclose(fpWrite);//关闭文件}printf("<html>\n");
    FILE* fpRead =fopen("data.txt","r");printf("<table border=\"1\"width=\"600\"\n");//以表格形式读取文件while(!feof(fpRead)){if(fscanf(fpRead,"%s %s %s %s",&name,&age,&gender,&phonenum)==NULL)exit(-1);elseif(!feof(fpRead)){//避免文件最后一行重复输出printf("<tr>\n");printf("<td width=\"200\">\n%s\n</td>\n", name);printf("<td width=\"100\">\n%s\n</td>\n", age);printf("<td width=\"100\">\n%s\n</td>\n", gender);printf("<td width=\"200\">\n%s\n</td>\n", phonenum);printf("</tr>\n");}}printf("</table>\n");fclose(fpRead);printf("</html>\n");}

编译后,新的cgi程序会输出到Apache24\cgi-bin。

Apache24\cgi-bin中新建data.txt,第一行中输入姓名、年龄、性别等信息

在浏览器中重新打开通讯录网页127.0.0.1:8086测试功能。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

标签: c语言 apache https

本文转载自: https://blog.csdn.net/WMX_0121/article/details/125110406
版权归原作者 WMX_0121 所有, 如有侵权,请联系我们删除。

“标准c语言实现通讯录(CGI)”的评论:

还没有评论