您的位置:首页 > 编程语言

CGI编程中POST/GET详解

2017-09-14 16:22 786 查看
CGI全称是“通用网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序一般运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量.
变量名描述
CONTENT_TYPE这个环境变量的值指示所传递来的信息的MIME类型。目前,环境变量CONTENT_TYPE一般都是:application/x-www-form-urlencoded,他表示数据来自于HTML表单。
CONTENT_LENGTH如果服务器与CGI程序信息的传递方式是POST,这个环境变量即使从标准输入STDIN中可以读到的有效数据的字节数。这个环境变量在读取所输入的数据时必须使用。
HTTP_COOKIE客户机内的 COOKIE 内容。
HTTP_USER_AGENT提供包含了版本数或其他专有数据的客户浏览器信息。
PATH_INFO这个环境变量的值表示紧接在CGI程序名之后的其他路径信息。它常常作为CGI程序的参数出现。
QUERY_STRING如果服务器与CGI程序信息的传递方式是GET,这个环境变量的值即使所传递的信息。这个信息经跟在CGI程序名的后面,两者中间用一个问号'?'分隔。
REMOTE_ADDR这个环境变量的值是发送请求的客户机的IP地址
REMOTE_HOST这个环境变量的值包含发送CGI请求的客户机的主机名。如果不支持你想查询,则无需定义此环境变量。
REQUEST_METHOD提供脚本被调用的方法。对于使用 HTTP/1.0 协议的脚本,仅 GET 和 POST 有意义。
SCRIPT_FILENAMECGI脚本的完整路径
SCRIPT_NAMECGI脚本的的名称
SERVER_NAME这是你的 WEB 服务器的主机名、别名或IP地址。
SERVER_SOFTWARE这个环境变量的值包含了调用CGI程序的HTTP服务器的名称和版本号
因为在fcgi_stdio.h中对printf进行了宏转向,在程序里的printf 不再是标准输出了
#define putchar FCGI_putchar
#define getchar FCGI_getchar
DLLAPI int FCGI_putchar(int c);
DLLAPI int FCGI_getchar(void);
实例
#include <stdlib.h>
#include <string.h>
#include “fcgi_stdio.h”

void Receive_Data(InputBuffer,ContentLength )
{
int i=0;
char InputBuffer[1024]={0};
for(i=0; i<ContentLength ; i++) {
InputBuffer[ContentLength ++] =getchar();
}
}

void Send_Data(p)
{
int i=0;

char *str="hello fcgi !!"

printf( "Status: 200 OK\r\n\r\n" );
for (i=0; i<strlen(str)-1; i++) {
putchar((int)str[i]);
}
}

int main(int argc, char*argv[])
{
char *p=NULL;
int ContentLength; /*数据长度*/
char *pRequestMethod; /* METHOD属性值 */
while(FCGI_Accept()>0)
{
/* 从环境变量REQUEST_METHOD中得到METHOD属性值 */
pRequestMethod = getenv("REQUEST_METHOD");
if(pRequestMethod==NULL)
{
printf("<p>request = null</p>");
return 0;
}
if (strncmp(pRequestMethod,"POST")==0)
{
printf("<p>OK the method is POST!\n</p>");
p = getenv("CONTENT_LENGTH"); //从环境变量CONTENT_LENGTH中得到数据长度
if (p!=NULL)
{
ContentLength = strtol(p, NULL, 10);
}
else
{
ContentLength = 0;
}

Receive_Data(ContentLength );
}
else if (strncmp(pRequestMethod,"GET")==0)
{
printf("<p>OK the method is GET!\n</p>");
p = getenv("QUERY_STRING"); //从环境变量QUERY_STRING中得到Form数据
if (p!=NULL)
{
Send_Data(p); //具体译码和处理数据,该函数代码略
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息