




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c语言开发cgi基础 目录 1 CGI概述 CGI CommonGatewayInterface 公用网关接口 规定了Web服务器调用其他可执行程序 CGI程序 的接口协议标准 Web服务器通过调用CGI程序实现和Web浏览器的交互 也就是CGI程序接受Web浏览器发送给Web服务器的信息 进行处理 将响应结果再回送给Web服务器及Web浏览器 CGI程序一般完成Web网页中表单 Form 数据的处理 数据库查询和实现与传统应用系统的集成等工作 cgi输入输出原理 cgi简单实例 留言板首先 在浏览器上有一个用于输入留言的文本框 当客户输入留言之后点击提交按钮 这个时候就启动了服务器上cgi目录下特定的程序 对数据进行处理 在这个例子中 cgi所做的处理有两个 第一 使用户在浏览器上看到 留言成功 的字样 第二 将用户的留言保存在服务器上特定的文本或者数据库内 这样利用cgi就可以实现服务器和客户端的交互 总结 简单来说 从物理上讲cgi实际是运行在web服务器上的一段程序 提供了同客户端html页面的接口 任何符合cgi标准的程序都是cgi程序 CGI方法 CGI方法是指调用CGI程序的途径 也就是如何向服务器提出请求 在该请求中定义了程序如何接收用户的数据 CGI方法主要有三种 其中两种较为常用 GET方法 CGI程序从环境变量QUERY STRING中获取数据 GET方法把用户表格中的数据加到URL的末尾 再传送到服务器 GET方法采用特殊的编码方法防止用户数据中的特殊字符导致CGI出错 由于URL的长度限制为1024 所以不能用于大量用户数据传递 使用GET方法时 可以在地址栏中看到URL后的用户数据如 POST方法 WEB服务器通过stdin 标准输入 向CGI程序传输数据 POST方法利用CONTENT LENGTH值确定用户的数据长度 在用户数据较大时采用POST使用POST 用户数据不显示在URL后 HEAD方法 与GET方法类似 但是从Web浏览器传递给服务器的仅仅是HTTP的头信息 2 CGI接口标准 CGI接口标准包括标准输入 环境变量 标准输出三部分 1 标准输入CGI程序像其他可执行程序一样 可通过标准输入 stdin 从Web服务器得到输入信息 如Form中的数据 这就是所谓的向CGI程序传递数据的POST方法 这意味着在操作系统命令行状态可执行CGI程序 对CGI程序进行调试 2 环境变量操作系统提供了许多环境变量 它们定义了程序的执行环境 应用程序可以存取它们 Web服务器和CGI接口又另外设置了自己的一些环境变量 用来向CGI程序传递一些重要的参数 CGI的GET方法还通过环境变量QUERY STRING向CGI程序传递Form中的数据 3 标准输出CGI程序通过标准输出 stdout 将输出信息传送给Web服务器 传送给Web服务器的信息可以用各种格式 通常是以纯文本或者HTML文本的形式 这样我们就可以在命令行状态调试CGI程序 并且得到它们的输出 环境变量 环境变量是文本串 名字 值对 可以被其他程序设置或者访问 它们是Web服务器传递数据给CGI程序的简单手段 之所以称为环境变量是因为它们是全局变量 任何程序都可以存取它们 下面是CGI程序设计中常常要用到的一些环境变量 HTTP REFERER 调用该CGI程序的网页的URL REMOTE HOST 调用该CGI程序的Web浏览器的机器名和域名 REQUEST METHOD 指的是当Web服务器传递数据给CGI程序时所采用的方法 分为GET和POST两种方法 GET方法仅通过环境变量 如QUERY STRING 传递数据给CGI程序 而POST方法通过环境变量和标准输入传递数据给CGI程序 因此POST方法可较方便地传递较多的数据给CGI程序 SCRIPT NAME 该CGI程序的名称 QUERY STRING 当使用POST方法时 Form中的数据最后放在QUERY STRING中 传递给CGI程序 CONTENT TYPE 传递给CGI程序数据的MIME类型 通常为 application x www form urlencodede 它是从HTMLForm中以POST方法传递数据给CGI程序的数据编码类型 称为URL编码类型 CONTENT LENGTH 传递给CGI程序的数据字符数 字节数 3 增加交互能力 Form Form元素下面我们就来简要介绍一下Form表中的常用元素 Form表内容 form表单实例 Yourname Sex MaleFemaleWhatareyoulike AppleOrangeStrawberryPeachWhat syouropinionofeatingfruit Ithink 2020 1 27 19 数据传送格式 当用户填完表格并按了SUBMIT按钮后 Web浏览器并非将用户所填的数据直接送给Web服务器 而先要经过一定的编码处理 Web浏览器总是将数据按照 变量名 变量值 这样的数据对格式进行编码 并且每对数据之间用一个 符号相连接 其中 变量名 就是Form元素中的NAME属性值 变量值 则是用户在输入框中所输入的数据 或者是用户所选择的数据 即RADIO CHECKBOX OPTION中的VALUE值 并且Web浏览器将用户数据中的所有空格都替换成 号 另外一些特殊字符的表示使用转义符 后面加上该特殊字符的十六进制ASCII码 特殊字符主要包括 以及多行文本中的回车 换行符 所有不能直接显示的高位ASCII符等 例如在上例中用户填入了下述信息 其中 n表示回车换行 name J K sex male flavor apple flavor orange opinion Ithinkitisnecessarythat nmaneatfruiteveryday 则Web浏览器发送数据时的字符序列为 name J 26K sex male flavor apple flavor orange weight middle opinion I think it is necessary that 0D 0Aman eat fruit everyday 下面是一个对Form数据进行解析并将结果回送给Web服务器的CGI程序 include include include converthexstringtoint inthtoi char s char digits 0123456789ABCDEF if islower s 0 s 0 toupper s 0 if islower s 1 s 1 toupper s 1 return16 strchr digits s 0 strchr digits 0 strchr digits s 1 strchr digits 0 main inti n charc printf Content type text plain n n n 0 if getenv CONTENT LENGTH n atoi getenv CONTENT LENGTH for i 0 i n i intis eq 0 c getchar switch c case break case c is eq 1 break putchar c if is eq putchar putchar n fflush stdout 上面的程序首先输出一个MIME头信息给Web服务器 检查输入中的字符数 并循环检查每一个字符 当发现字符为 时 意味着一个名字 值对的结束 程序输出一个空行 当发现字符为 时 将它转换成空格 当发现字符为 时 意味着一个两字符的十六进制值的开始 调用htoi 函数将随后的两个字符转换为相应的ASCII字符 当发现字符为 时 意味着一个名字 值对的名字部分的结束 并将它转换成字符 最后将转换后的字符输出给Web服务器 4 CGI的编程实现 CGI程序实现一般有如下几个主要步骤 1 根据POST方法或GET方法 接收客户端提交的数据 若以POST方法提交数据 则程序先从CONTENT LENGTH环境变量得到数据的字长 然后从标准输入中读取相应长度的字符串即可得到提交的数据 若以GET方法提交数据 客户端提交的数据被保存在QUERY STRING环境变量中 通过调用函数getenv QUERY STRING 来读取数据 2 URL编码的解码 这个过程较为复杂 在URL编码的规则下 变量之间用 分开 变量与其对应值之间用 连接 空格符用 代替 特殊意义的字符用 接相应的十六进制ASCII码代替 解码即为编码的逆过程 在程序中 对于提取的数据 当发现字符为 时 将它转换成空格 当发现字符为 时 意味着一个变量 值对的结束 在此处将字符切成几个字符串 当再现字符为 时 意味着一个变量 值对的变量名部分的结束 在此再将变量 值对分开 最后将十六进制ASCII码值表示的特殊字符转换成相应的ASCII字符 3 根据上一部分解析出来的变量 值对 判断客户端请求的含义 并传送消息给应用程序主进程 来完成客户端请求要完成的任务 如系统参数设置 远端设备控制等 然后应用程序将执行结果返回给CGI进程 由CGI进程用printf 函数来产生HTML源代码 再把执行结果返回给客户端 将编写好的CGI程序编译成可执行文件放在WEBServer设置的CGI目录下 CGI程序就能被正确地执行 下面是一个简单的CGI程序 它将HTML中Form的信息直接输出到Web浏览器 include includemain inti n printf Content type text plain n n n 0 if getenv CONTENT LENGTH n atoi getenv CONTENT LENGTH for i 0 i n i putchar getchar putchar n fflush stdout 下面对此程序作一下简要的分析 prinft Content type text plain n n 此行通过标准输出将字符串 Content type text plain n n 传送给Web服务器 它是一个MIME头信息 它告诉Web服务器随后的输出是以纯ASCII文本的形式 请注意在这个头信息中有两个新行符 这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行 if getenv CONTENT LENGTH n atoi getenv CONTENT LENGTH 此行首先检查环境变量CONTENT LENGTH是否存在 Web服务器在调用使用POST方法的CGI程序时设置此环境变量 它的文本值表示Web服务器传送给CGI程序的输入中的字符数目 因此我们使用函数atoi 将此环境变量的值转换成整数 并赋给变量n 请注意Web服务器并不以文件结束符来终止它的输出 所以如果不检查环境变量CONTENT LENGTH CGI程序就无法知道什么时候输入结束了 for i 0 i n i putchar getchar 此行从0循环到 CONTENT LENGTH 1 次将标准输入中读到的每一个字符直接拷贝到标准输出 也就是将所有的输入以ASCII的形式回送给Web服务器 通过此例 我们可将CGI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年美发师创意造型考核试卷:现代简约发型潮流趋势试题
- 消防标准化建设现场管理2025年消防执业资格考试题库
- 2025年消防安知识培训考试题库:消防信息化建设信息化系统试题
- 2025年统计学专业期末考试题库实战演练试题及答案
- 2025年平面设计师专业能力测试卷:平面设计作品设计理念可持续性试题
- 2025年消防执业资格考试题库:消防标准化建设消防安全设施操作应急演练试题
- 2025年美发师创意造型考核案例解析试题
- 2025年小学语文毕业升学考试真模拟卷(古诗词教学案例与反思试题)
- 2025年大学辅导员招聘考试题库(教育心理)心理健康知识试题
- 2025年乡村医生农村慢性病管理考试题库:慢性病监测与评估
- 护理共情沟通技能提升
- 脱离母子关系协议书
- 诊所负责人聘用合同9篇
- 高级保洁考试试题及答案
- 人教版七年级上册数学教案(表格版)
- 2025-2030中国水利信息系统行业市场发展现状及发展趋势与投资前景研究报告
- 四轮定位外协协议合同
- 药学知识与技能课件
- 主持人个人礼仪规范
- 2025年人教版《太阳》标准课件
- 老年患者的安全管理课件
评论
0/150
提交评论