版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言也能干大事
之
开发网站如鹏网CGI开发库CGICCGIC库完全自己写程序写CGI程序会比较麻烦,比如说要自己printf(“Content-type:text/html;charset=gbk\r\n”)、要注意报文头和正文之间的两个"\r\n\r\n"、要注意处理querystring多参数、处理文件上传等会比较麻烦。因此引入一个简化开发的CGIC库。CGIC只是简化开发而已,离了它我们自己也都可以搞定CGI,只不过麻烦而已。这个CGIC经过了如鹏网的修改,才运行在windows下。环境搭建:cgic.c、cgic.h添加到项目中,先把项目拷到项目根目录下,然后在项目根节点点右键“添加”→“现有项”,选择这两个文件。#include"cgic.h"intcgiMain(){ cgiHeaderContentType("text/html;charset=gbk"); fprintf(cgiOut,"大家好"); return0;}CGIC原理解析CGIC程序入口方法是cgiMain,因为CGIC实现了main方法,它的main方法中完成了请求的处理和响应,在最后的调用cgiMain让我们来实现。cgiHeaderContentType代码观赏(*)cgiOut就是标准输出,其实直接用fprintf也可以,不过CGIC推荐用cgiOut,这样可以使用它的调试工具。查看CGIC源代码我们明了了,明白原理而不是“只会用工具”是如鹏程序员的重要特征。CGIC编写登陆程序使用cgiFormString可以获取请求参数中指定name的值案例:判断用户名、密码是不是admin、123456(*)乱码问题:地址栏中直接输入QueryString(后面会讲这属于GET)一般浏览器默认会对中文字符进行UTF8编码,而CGIC属于支持ANSI编码(ANSI、UTF8、GBK、Unicode等关系非常复杂,对于初学者先不用管细节),对UTF-8不支持。所以尽量不要在QueryString中包含中文,后面讲的用的更多的POST方式没有这个问题。(*)ContentType不要忘了写charset=gbk,否则可能会有乱码问题cgiHeaderLocationcgiHeaderLocation是做重定向,其实就是简化了printf("Location:");查看源代码得知,cgiHeaderLocation、cgiHeaderStatus、cgiHeaderContentType都是以"\r\n\r\n"结尾,因此只能运行其中一个并且cgiHeaderLocation、cgiHeaderStatus、cgiHeaderContentType必须是报文头中最后一项。表单提交Html表单<form>可以自动给服务器提交参数(get是通过url,post是通过报文体),不用用户自己拼url。action指定把表单内容提交给谁。浏览器向服务器端提交数据,被提交数据的表单(input、select、textarea等)放到form中,form中通过action属性设定表单被提交给哪个页面,为了在服务端取出表单项的值,需要在HTML中为表单元素设定name属性注意id是给JS操作Dom用的,name才是提交给服务器用的。id不能重复,name可以重复,重复的name的值都会被提交给服务器。服务器端用cgiFormString等来根据表单项的name来获得提交的属性值。checkbox没选中为null,选中为"on"。强调当我们点击【登录】按钮以后是浏览器将用户填写的文本框等控件中的值“提取”出来发送给服务器,而不是服务器来读取用户填写的这个页面。哪些标签的哪些值会被提交给服务器呢?将用户填写的内容提交到服务器有如下几个条件(使用浏览器监视网络请求验证):只能为input、textarea、select三种类型的标签的value属性的值(select是选中项的value)才会提交给服务器。标签必须设定name属性(道理:没有name怎么拼网址)。如果要将标签的value属性值提交到服务器,则必须为标签设定name属性,提交到服务器的时候将会以“name=value”的键值对的方式提交给服务器。name是给服务器用的,id是给Dom用的。对于RadioButton,同name的为一组,选中的RadioButton的value被提交到服务器。(讲道理:如果都提交,那服务器知道谁被选中了吗?)当input=submit的时候,只有被点击的按钮(要有name)的value才会被提交(道理:否则我知道谁被点了?)。放到form标签内。只有放到form标签内的标签才可能会被提交到服务器,form之外的input等标签被忽略。Get与Postget(默认值)是通过URL传递表单值,post传递的表单值是隐藏到http报文体中,url中看不到。区别(常考):get是通过url传递表单值,post通过url看不到表单域的值;get传递的数据量是有限的,如果要传递大数据量不能用get,比如type=“file”上传文章、type=“password”传递密码或者<textarea>发表大段文章,post则没有这个限制。post区别:无法把网址发给其他人;只要当前页面请求是POST请求,那么刷新就是重新发出POST,部分浏览器会提示“是否重复提交”。只要在地址栏中输入一个网址回车访问,那么就是GET。数据格式。服务端文件名后跟着“?”,由于客户端可能向服务器端提交多个键值对,键值对之间用“&”进行分割,如果URL中有汉字、特殊符号等,则需要对URL进行编码。必须要在form中。当点击inputtype="submit"的按钮的时候,会把它所在的form中的所有“有name属性的”input/select/textarea的值提交给服务器。inputtype="text"的值就是用户输入的值;对于inputtype="checkbox"的值就是“选中是on,没选中则没有”,对于inputype="radio"的则是被选中的name、value提交给服务器;对于inputtype="submit"的则是被点击的name、value被提交给服务器。对textarea就是输入的文本;对于select就是选择项对应的option的value;CGIC常用内置变量做一个登陆页面。练习:做一个注册表单。通过查看源代码知道下面的内置变量是怎么来的cgiServerSoftware网站服务器名称;cgiQueryString查询字符串;cgiScriptName脚本文件路径;cgiRemoteAddr客户端的IP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 村委会环境卫生奖惩制度
- 村组公路考核奖惩制度
- 校园卫生管理奖惩制度
- 档案事业单位奖惩制度
- 毕业班教师奖惩制度细则
- 污染源普查考核奖惩制度
- 汽车销售考核奖惩制度
- 法院保安各岗位奖惩制度
- 派驻机构考核奖惩制度
- 游戏研发公司奖惩制度
- 客运公司安全生产培训和教育学习制度
- 攻读博士学位期间材料科学研究计划参考范文
- 2023陆上石油天然气停产井安全风险防控指南
- DB32∕T2621-2014 特大型桥梁机电工程质量检验评定规范
- 三氧化硫泄露现场预案(6篇)
- 西方社会学理论教案
- 考点24 人与环境-五年(2020-2024年)高考生物学真题专项分类汇编
- 概率论与数理统计章节练习题及答案
- 医疗设备的保养与维护
- 2024届中职对口(职教)高考语文冲刺复习题(应用文写作)(含解析)
- 第二单元 理想之光 课件-高二上学期音乐人音版(2019)必修2 歌唱
评论
0/150
提交评论