获取CGI环境变量
来源:互联网 发布:乐视软件商城 编辑:程序博客网 时间:2024/05/18 03:18
1.CGI环境变量简介
CGI程序继承了系统的环境变量,CGI的环境变量,在CGI程序在启动时初始化,结束时销毁,当一个CGI程序不是被HTTP服务器调用时,其环境变量基本是系统的环境变量。当属于HTTP服务器调用时,他的环境变量就会多了以下关于HTTP服务器、客户端、CGI传输过程等项目。
CGI相关的环境变量有三种,与请求相关的环境变量、与服务器相关的环境变量,以及与客户端相关的环境变量。
2.下面列举一些环境变量
环境变量
意义
SERVER_NAME
CGI脚本运行时的主机名和IP地址.
SERVER_SOFTWARE
你的服务器的类型如: CERN/3.0 或 NCSA/1.3.
GATEWAY_INTERFACE
运行的CGI版本.对于UNIX服务器,这是CGI/1.1.
SERVER_PROTOCOL
服务器运行的HTTP协议.这里当是HTTP/1.0.
SERVER_PORT
服务器运行的TCP口,通常Web服务器是80.
REQUEST_METHOD
POST 或 GET,取决于你的表单是怎样递交的.
HTTP_ACCEPT
浏览器能直接接收的Content-types, 可以有HTTP Accept header定义.
HTTP_USER_AGENT
递交表单的浏览器的名称、版本 和其他平台性的附加信息。
HTTP_REFERER
递交表单的文本的 URL,不是所有的浏览器都发出这个信息,不要依赖它
PATH_INFO
附加的路径信息, 由浏览器通过GET方法发出.
PATH_TRANSLATED
在PATH_INFO中系统规定的路径信息.
SCRIPT_NAME
指向这个CGI脚本的路径,是在URL中显示的(如, /cgi-bin/thescript).
QUERY_STRING
脚本参数或者表单输入项(如果是用GET递交). QUERY_STRING包含URL中问号后面的参数.
REMOTE_HOST
递交脚本的主机名,这个值不能被设置.
REMOTE_ADDR
递交脚本的主机IP地址.
REMOTE_USER
递交脚本的用户名. 如果服务器的authentication被激活,这个值可以设置。
REMOTE_IDENT
如果Web服务器是在ident (一种确认用户连接你的协议)运行,递交表单的系统也在运行ident,这个变量就含有ident返回值.
CONTENT_TYPE
如果表单是用POST递交,这个值将是 application/x-www-form-urlencoded.在上载文件的表单中, content-type是个 multipart/form-data.
CONTENT_LENGTH
对于用POST递交的表单,标准输入口的字节数.
3.获取CGI变量
#include <iostream>#include <stdlib.h>#include <string.h>const std::string ENV[]={"SERVER_NAME","SERVER_SOFTWARE","GATEWAY_INTERFACE","SERVER_PROTOCOL","SERVER_PORT","REQUEST_METHOD","HTTP_ACCEPT","HTTP_USER_AGENT","HTTP_REFERER","PATH_INFO","PATH_TRANSLATED","SCRIPT_NAME","QUERY_STRING","REMOTE_HOST","REMOTE_ADDR","REMOTE_USER","REMOTE_IDENT","CONTENT_TYPE","CONTENT_LENGTH"};int get_cgi_env(){int i = 0;std::cout<<"Content-type:text/html\r\n\r\n";std::cout<<"<html>\n";std::cout<<"<head>\n";std::cout<<"<title> CGI Envrionment Variables</title>\n";std::cout<<"</head>\n";std::cout<<"<body>\n";//std::cout<<"<h2>Hello World ! This is my first CGI program </h2>\n";std::cout<<"<table border =\"0\" cellspacing=\"2\">";for(i=0;i< sizeof(ENV)/sizeof(ENV[0]);i++){std::cout<<"<tr>";std::cout<<"<td>" <<ENV[i]<<"</td>";std::cout<<"<td>";char *value = getenv(ENV[i].c_str());if(NULL != value){std::cout<< value;}else{std::cout<<"Environment variable does not exist.";}std::cout<<"</td>";std::cout<<"</tr>\n";}std::cout<<"</table>";std::cout<<"</body>\n";std::cout<<"</html>\n";//std::cout<<"</head>\n";return 0;}int main(){ get_cgi_env();return 0;}
g++ 2.cpp -o get_cgi_env -g
拷贝可执行文件到http服务器的cgi-bin目录下
root@ubuntu:/share/http/apache2.2.32-install# cp /share/get_cgi_env cgi-bin/
浏览器输入
http://192.168.1.211:8080/cgi-bin/get_cgi_env
浏览器输出
SERVER_NAME192.168.1.211SERVER_SOFTWAREApache/2.2.32 (Unix)GATEWAY_INTERFACECGI/1.1SERVER_PROTOCOLHTTP/1.1SERVER_PORT8080REQUEST_METHODGETHTTP_ACCEPTtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8HTTP_USER_AGENTMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0HTTP_REFEREREnvironment variable does not exist.PATH_INFOEnvironment variable does not exist.PATH_TRANSLATEDEnvironment variable does not exist.SCRIPT_NAME/cgi-bin/get_cgi_envQUERY_STRING REMOTE_HOSTEnvironment variable does not exist.REMOTE_ADDR192.168.1.100REMOTE_USEREnvironment variable does not exist.REMOTE_IDENTEnvironment variable does not exist.CONTENT_TYPEEnvironment variable does not exist.CONTENT_LENGTHEnvironment variable does not exist.
- 获取各种CGI环境变量
- 获取CGI环境变量
- 用getenv函数获取各种CGI环境变量
- cgi获取所有环境变量[C语言]
- cgi程序常用环境变量及获取方法
- CGI 环境变量
- CGI 环境变量
- cgi环境变量
- CGI 环境变量
- CGI 环境变量
- CGI 环境变量
- CGI环境变量
- CGI 环境变量
- CGI 环境变量
- CGI环境变量
- CGI编程---CGI环境变量
- cgi和fastcgi获取所有环境变量(C语言)
- CGI教学:CGI常用环境变量
- Java中static代码块、普通代码块和构造代码块的执行顺序
- 快速排序算法 c语言
- POJ
- HDU-2068 RPG的错排(组合, 错排)
- HashSet和HashMap比较
- 获取CGI环境变量
- [编程题] 小易喜欢的数列
- openwrt -- mt7688 kernel 添加修改patch -- quilt工具
- Triangle自底向上解法
- F
- 用tensorflow创建文件目录以及删除目录下所有内容
- 分布式锁
- 剑指offer——25.复杂链表的复制
- nyoj 44子串和