1.1 如何编写CGI程序
有了上面的知识我们就可以马上写一个简单的CGI程序了。代码如下:
void main(void)
{// 本程序将用户输入的数据打印出来
fprintf(stdout,"content-type: text/plain\n\n");
// 输出一个CGI标题,这行代码的意义后面会讲解
char *pszMethod;
pszMethod = getenv("REQUEST_METHOD");
if(strncmp(pszMethod,"GET") == 0)
{// GET method
//读取环境变量来获取数据
fprintf(stdout,"input data is :\n%s",getenv("QUERY_STRING"));
}
else
{// POST method
//读取STDIN来获取数据
int iLength=atoi(getenv("CONTENT_LENGTH"));
fprintf(stdout,"input data is :\n");
for(int i=0;i<iLength;i++)
{
char cGet=fgetchar(stdin);
fputchar(stdout,cGet);
}
}
}>
如上面说讲,在CGI程序输出时必须先输出一个CGI标题,标题共有以下三类:
Location: 标题,指明输出另一个文档的URL,例如 fprintf(stdout,"Location: http://www.vchelp.net/\n\n");
Content-Type: 标题,指明发送的数据的MIME类型,例如 fprintf(stdout,"Content-Type: text/html\n\n");
Status: 标题,指明HTTP状态码,例如 fprintf(stdout,"Status: 200\n\n");
注意每种标题后都必须跟一个换行和一个空行。
MIME类型以类型/子类型的形式来表示,下面是一些常用的类型/子类型的组合:
Text/plain 普通文本类型
Text/html HTML格式的文本类型
Audio/basic 八位声音文件格式,后缀为.au
Video/mpeg MPEG文件格式
Video/quicktime QuickTime文件格式
Image/gif GIF图形文件
Image/jpeg JPEG图形文件
Image/x-xbitmap X bitmap图形文件,后缀为.xbm