**
开发网站概述
**
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,”");
1234567891011121314151617181920
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;
}
}
}