您的位置:首页 > 其它

cgi开发

2019-03-15 22:21 67 查看
**

CGI开发

**

开发网站概述

**
http协议报文

请求(报文头各行之间用"\r\n"隔开)
GET / HTTP/1.1表示向服务器用GET方式请求首页,使用HTTP/1.1协议
User-Agent(简称UA)为浏览器的版本信息。通过这个信息可以读取浏览器是IE还是FireFox、支持的插件等。看看IE和Chrome的UserAgent不一样
Referer:来源页面、所属页面
Accept-Encoding:服务器支持什么压缩算法。Accept-Language:浏览器支持什么语言。
响应(报文头各行之间用"\r\n"隔开)
响应码:“200” : OK;
“302” : Found 暂时转移,用于重定向; (303、307)
“404” : Not Found 未找到。 500 服务器错误。
报文头、报文体:报文正文是被渲染到界面上的,之间要有两对"\r\n"隔开。
Content-Type: text/html; charset=utf-8 表示返回数据的类型,charset正文编码。windows中写CGI程序一般都用gbk编码"text/html; charset=gbk"。报文头和正文之间一定要有两对"\r\n"隔开。
服务器通过Content-Type告诉客户端响应的数据的类型,这样浏览器就根据返回数据的类型来进行不同的处理,如果是图片类型就显示图片,如果是文本类型就直接显示内容,如果用html类型就用浏览器显示内容.常用Content-Type:text/html、image/gif、image/jpeg、text/plain、text/javascript。试着改成text/plain。这就是为什么写错了就会直接显示html的原因。

Form表单提交

<!doctype html>

点我传数据 用户名:
密码:
男 女
描述:textarea name=“desc” cols=“50” rows=“30”>
民族: 临沂 北京 河南
char username[256];
char pdw[250];
char desc[256];
char sex[3];
char quyu[256];

if(cgiFormSubmitClicked(“login”) == cgiFormSuccess){
cgi FormString(“username”,username, sizeof(username));
cgi FormString(“pwd”, pwd, sizeof(pwd));
cgi FormString(“sex”,sex, sizeof(sex));
cgi FormString(“desc”, desc sizeof(desc));
cgi FormString(“quyu”, quyu sizeof(quyu));

cgiHeaderContentType(“text/html;charset=gbk”);
//printf(username);
//printf(pwd);
fprintf(cgiOut,");
fprintf(cgiOut,“用户名:%s,性别:%s,username,quyu);
fprintf(cgiOut,”");
return 0;
}
Cgi如何区分哪个页面提交的?

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

int cgiMain() {
char modle[32] = { 0 };
char fun[32] = { 0 };
if (cgiFormSring(“model”, model, sizeof(model)) != cgiFormSuccess) {
cgiHeaderContentType(“text/html;charset=gbk”);
printf(“model参数必传”);
return 0;
}
if (cgiFormString(“fun”, fun, sizeof(fun)) != cgiFormSuccess) {
cgiHeaderContentType(“text/html;charset=gbk”);
printf(“fun参数必传”);
return 0;
}
}

if (strcmp(model), “user” == 0)
{
if (strcmp(fun, “toLigin”) == 0)
{
cgiHeaderLocation(“login.html”);
}
else if (strcmp(fun, “toRegister”) == 0)
{
cgiHeaderLocation(“toRegister.html”);
}
else if (strcmp(fun, “login”) == 0)
{
char username[256];
char pwd[250];
cgiFormstring(“username”, username, sizeof(username));
cgiFormstring(“pwd”, pwd sizeof(pwd));
//查询数据库对比用户名密码的
if (strcmp(username, “zq”) == 0 && strcmp(pwd, “123”) == 0)
{
cgiHeaderContentType(“text/html;charset=gbk”);
printf(“登陆成功”);
return 0;
}
else
{
cgiHeaderContentType(“text/html;charset=gbk”);
printf(“用户名或密码错误”);
return 0;
}
}
}
模板引擎

关于页面上要展示的需要从后台获取的那种数据,先用个占位符写上,回头cgi往前台传数据的时候,去替换这个占位符
使用方法:
新建个index.html
<!doctype html>

您的姓名是<TMPL_VAN name = “realname” / >, 您的年龄是<TMPL_VAN name = “age” / >岁
<br / >

列表< / p>

  • 商品名称:;价格:
1 2 3 4 5 6 7 8 9 一般前台页面展示数据2种:变量(姓名、性别这种单个的)、列表 后台传过来的变量 传过来的列表 商品名称: ; //列表种的变量值 价格: 后台c代码:往前台传2种类型数据:变量、列表 TMPL_varlist *varlist是最后统一都放在这个变量里面传到前台 Varlist里面可以放普通的变量:varlist = TMPL_add_var(varlist, “realname”, “赵琦”, “age”, “80”, 0); Varlist里面也可以放个列表类型的数据(看代码):TMPL_loop *loopGoods #include

int cgiMain() {
cgiHeaderContentType(“text/html;charset=gbk”);

//往前台index.html传数据并跳转
TMPL_varlist *varlist = 0;
TMPL_loop *loopGoods = 0;

varlist = TMPL_add_var(varlist, “realname”, “赵琦”, “age”, “80”, 0);
//循环的列表数据
loopGoods = TMPL_add_varlist(varlist, TMPL_add_var(0), “goodname”, “裤子”, “price”, “20”, 0));
loopGoods = TMPL_add_varlist(varlist, TMPL_add_var(0), “goodname”, “褂子”, “price”, “10”, 0));
varlist = TMPL_add_var(varlist, “goods”, loopGoods);
TMPL_writer(“index.html”, 0, 0, varlist, cgiOut, cgiOut);
TMPL_free_varlist(varlist);
return 0;

**

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: