当前位置: 首页 > news >正文

搜搜网站收录提交入口大连网站开发哪家好

搜搜网站收录提交入口,大连网站开发哪家好,广东一站式网站建设费用,促销策划C Web 编程什么是 CGI#xff1f;公共网关接口#xff08;CGI#xff09;#xff0c;是一套标准#xff0c;定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的#xff0c;NCSA 定义 CGI 如下#xff1a;公共网关接口#xff08;…C Web 编程什么是 CGI公共网关接口CGI是一套标准定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的NCSA 定义 CGI 如下公共网关接口CGI是一种用于外部网关程序与信息服务器如 HTTP 服务器对接的接口标准。目前的版本是 CGI/1.1CGI/1.2 版本正在推进中。Web 浏览为了更好地了解 CGI 的概念让我们点击一个超链接浏览一个特定的网页或 URL看看会发生什么。您的浏览器联系上 HTTP Web 服务器并请求 URL即文件名。Web 服务器将解析 URL并查找文件名。如果找到请求的文件Web 服务器会把文件发送回浏览器否则发送一条错误消息表明您请求了一个错误的文件。Web 浏览器从 Web 服务器获取响应并根据接收到的响应来显示文件或错误消息。然而以这种方式搭建起来的 HTTP 服务器不管何时请求目录中的某个文件HTTP 服务器发送回来的不是该文件而是以程序形式执行并把执行产生的输出发送回浏览器显示出来。公共网关接口CGI是使得应用程序称为 CGI 程序或 CGI 脚本能够与 Web 服务器以及客户端进行交互的标准协议。这些 CGI 程序可以用 Python、PERL、Shell、C 或 C 等进行编写。CGI 架构图下图演示了 CGI 的架构Web 服务器配置在您进行 CGI 编程之前请确保您的 Web 服务器支持 CGI并已配置成可以处理 CGI 程序。所有由 HTTP 服务器执行的 CGI 程序都必须在预配置的目录中。该目录称为 CGI 目录按照惯例命名为 /var/www/cgi-bin。虽然 CGI 文件是 C 可执行文件但是按照惯例它的扩展名是 .cgi。默认情况下Apache Web 服务器会配置在 /var/www/cgi-bin 中运行 CGI 程序。如果您想指定其他目录来运行 CGI 脚本您可以在 httpd.conf 文件中修改以下部分 Directory /var/www/cgi-binAllowOverride NoneOptions ExecCGIOrder allow,denyAllow fromall /DirectoryDirectory /var/www/cgi-bin Options All /Directory在这里我们假设已经配置好 Web 服务器并能成功运行你可以运行任意的 CGI 程序比如 Perl 或 Shell 等。第一个 CGI 程序请看下面的 C 程序实例#include iostream using namespace std;int main () {cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout titleHello World - 第一个 CGI 程序/title\n;cout /head\n;cout body\n;cout h2Hello World! 这是我的第一个 CGI 程序/h2\n;cout /body\n;cout /html\n;return0; }编译上面的代码把可执行文件命名为 cplusplus.cgi并把这个文件保存在 /var/www/cgi-bin 目录中。在运行 CGI 程序之前请使用 chmod 755 cplusplus.cgi UNIX 命令来修改文件模式确保文件可执行。访问可执行文件您会看到下面的输出Hello World! 这是我的第一个 CGI 程序上面的 C 程序是一个简单的程序把它的输出写在 STDOUT 文件上即显示在屏幕上。在这里值得注意一点第一行输出 Content-type:text/html\r\n\r\n。这一行发送回浏览器并指定要显示在浏览器窗口上的内容类型。您必须理解 CGI 的基本概念这样才能进一步使用 Python 编写更多复杂的 CGI 程序。C CGI 程序可以与任何其他外部的系统如 RDBMS进行交互。HTTP 头信息行 Content-type:text/html\r\n\r\n 是 HTTP 头信息的组成部分它被发送到浏览器以便更好地理解页面内容。HTTP 头信息的形式如下 HTTP 字段名称: 字段内容例如 Content-type: text/html\r\n\r\n还有一些其他的重要的 HTTP 头信息这些在您的 CGI 编程中都会经常被用到。头信息描述Content-type:MIME 字符串定义返回的文件格式。例如 Content-type:text/html。Expires: Date信息变成无效的日期。浏览器使用它来判断一个页面何时需要刷新。一个有效的日期字符串的格式应为 01 Jan 1998 12:00:00 GMT。Location: URL这个 URL 是指应该返回的 URL而不是请求的 URL。你可以使用它来重定向一个请求到任意的文件。Last-modified: Date资源的最后修改日期。Content-length: N要返回的数据的长度以字节为单位。浏览器使用这个值来表示一个文件的预计下载时间。Set-Cookie: String通过 string 设置 cookie。CGI 环境变量所有的 CGI 程序都可以访问下列的环境变量。这些变量在编写 CGI 程序时扮演了非常重要的角色。变量名描述CONTENT_TYPE内容的数据类型。当客户端向服务器发送附加内容时使用。例如文件上传等功能。CONTENT_LENGTH查询的信息长度。只对 POST 请求可用。HTTP_COOKIE以键 值对的形式返回设置的 cookies。HTTP_USER_AGENT用户代理请求标头字段递交用户发起请求的有关信息包含了浏览器的名称、版本和其他平台性的附加信息。PATH_INFOCGI 脚本的路径。QUERY_STRING通过 GET 方法发送请求时的 URL 编码信息包含 URL 中问号后面的参数。REMOTE_ADDR发出请求的远程主机的 IP 地址。这在日志记录和认证时是非常有用的。REMOTE_HOST发出请求的主机的完全限定名称。如果此信息不可用则可以用 REMOTE_ADDR 来获取 IP 地址。REQUEST_METHOD用于发出请求的方法。最常见的方法是 GET 和 POST。SCRIPT_FILENAMECGI 脚本的完整路径。SCRIPT_NAMECGI 脚本的名称。SERVER_NAME服务器的主机名或 IP 地址。SERVER_SOFTWARE服务器上运行的软件的名称和版本。下面的 CGI 程序列出了所有的 CGI 变量。实例#include iostream #include stdlib.h #include string using namespace std;const string ENV[ 24 ] { COMSPEC, DOCUMENT_ROOT, GATEWAY_INTERFACE, HTTP_ACCEPT, HTTP_ACCEPT_ENCODING, HTTP_ACCEPT_LANGUAGE, HTTP_CONNECTION, HTTP_HOST, HTTP_USER_AGENT, PATH, QUERY_STRING, REMOTE_ADDR, REMOTE_PORT, REQUEST_METHOD, REQUEST_URI, SCRIPT_FILENAME,SCRIPT_NAME, SERVER_ADDR, SERVER_ADMIN, SERVER_NAME,SERVER_PORT,SERVER_PROTOCOL, SERVER_SIGNATURE,SERVER_SOFTWARE }; int main () {cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout titleCGI 环境变量/title\n;cout /head\n;cout body\n;cout table border \0\ cellspacing \2\;for ( int i 0; i 24; i ){cout trtdENV[ i ] /tdtd;// 尝试检索环境变量的值char *value getenv( ENV[ i ].c_str() ); if ( value !0 ){cout value; }else{cout 环境变量不存在。;}cout /td/tr\n;}cout /table\n;cout /body\n;cout /html\n;return0; }C CGI 库在真实的实例中您需要通过 CGI 程序执行许多操作。这里有一个专为 C 程序而编写的 CGI 库我们可以从 ftp://ftp.gnu.org/gnu/cgicc/ 上下载这个 CGI 库并按照下面的步骤安装库 $ tar xzf cgicc-X.X.X.tar.gz$ cd cgicc-X.X.X/$ ./configure --prefix/usr$ make$ make install**注意**libcgicc.so 和 libcgicc.a 库会被安装到/usr/lib目录下需执行拷贝命令$ sudo cp /usr/lib/libcgicc.* /usr/lib64/才能使 CGI 程序自动找到 libcgicc.so 动态链接库。您可以点击 C CGI Lib Documentation查看相关的库文档。GET 和 POST 方法您可能有遇到过这样的情况当您需要从浏览器传递一些信息到 Web 服务器最后再传到 CGI 程序。通常浏览器会使用两种方法把这个信息传到 Web 服务器分别是 GET 和 POST 方法。使用 GET 方法传递信息GET 方法发送已编码的用户信息追加到页面请求中。页面和已编码信息通过 ? 字符分隔开如下所示 http://www.test.com/cgi-bin/cpp.cgi?key1value1key2value2GET 方法是默认的从浏览器向 Web 服务器传信息的方法它会在浏览器的地址栏中生成一串很长的字符串。当您向服务器传密码或其他一些敏感信息时不要使用 GET 方法。GET 方法有大小限制在一个请求字符串中最多可以传 1024 个字符。当使用 GET 方法时是使用 QUERY_STRING http 头来传递信息在 CGI 程序中可使用 QUERY_STRING 环境变量来访问。您可以通过在 URL 后跟上简单连接的键值对也可以通过使用 HTML FORM 标签的 GET 方法来传信息。简单的 URL 实例Get 方法下面是一个简单的 URL使用 GET 方法传递两个值给 hello_get.py 程序。/cgi-bin/cpp_get.cgi?first_nameZARAlast_nameALI下面的实例生成 cpp_get.cgi CGI 程序用于处理 Web 浏览器给出的输入。通过使用 C CGI 库可以很容易地访问传递的信息实例#includeiostream#includevector#includestring#includestdio.h#includestdlib.h#includecgicc/CgiDefs.h#includecgicc/Cgicc.h#includecgicc/HTTPHTMLHeader.h#includecgicc/HTMLClasses.husingnamespace std; usingnamespace cgicc;intmain(){Cgicc formData;cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout title使用 GET 和 POST 方法/title\n;cout /head\n;cout body\n;form_iterator fi formData.getElement(first_name); if( !fi-isEmpty() fi ! (*formData).end()) { cout 名 **fi endl; }else{cout No text entered for first name endl; }cout br/\n;fi formData.getElement(last_name); if( !fi-isEmpty() fi ! (*formData).end()) { cout 姓 **fi endl; }else{cout No text entered for last name endl; }cout br/\n;cout /body\n;cout /html\n;return0; }现在编译上面的程序如下所示$g -o cpp_get.cgi cpp_get.cpp -lcgicc生成 cpp_get.cgi并把它放在 CGI 目录中并尝试使用下面的链接进行访问/cgi-bin/cpp_get.cgi?first_nameZARAlast_nameALI这会产生以下结果 名ZARA 姓ALI 简单的表单实例GET 方法下面是一个简单的实例使用 HTML 表单和提交按钮传递两个值。我们将使用相同的 CGI 脚本 cpp_get.cgi 来处理输入。form action/cgi-bin/cpp_get.cgi methodget 名inputtypetext namefirst_name br /姓inputtypetext namelast_name / inputtypesubmit value提交 / /form下面是上述表单的实际输出请输入名和姓然后点击提交按钮查看结果。使用 POST 方法传递信息一个更可靠的向 CGI 程序传递信息的方法是 POST 方法。这种方法打包信息的方式与 GET 方法相同不同的是它不是把信息以文本字符串形式放在 URL 中的 ? 之后进行传递而是把它以单独的消息形式进行传递。该消息是以标准输入的形式传给 CGI 脚本的。我们同样使用 cpp_get.cgi 程序来处理 POST 方法。让我们以同样的例子通过使用 HTML 表单和提交按钮来传递两个值只不过这次我们使用的不是 GET 方法而是 POST 方法如下所示form action/cgi-bin/cpp_get.cgi methodpost 名inputtypetext namefirst_namebr / 姓inputtypetext namelast_name /inputtypesubmit value提交 / /form向 CGI 程序传递复选框数据当需要选择多个选项时我们使用复选框。下面的 HTML 代码实例是一个带有两个复选框的表单form action/cgi-bin/cpp_checkbox.cgi methodPOST target_blank inputtypecheckbox namemaths valueon / 数学 inputtypecheckbox namephysics valueon / 物理 inputtypesubmit value选择学科 / /form下面的 C 程序会生成 cpp_checkbox.cgi 脚本用于处理 Web 浏览器通过复选框给出的输入。实例#includeiostream#includevector#includestring#includestdio.h#includestdlib.h#includecgicc/CgiDefs.h#includecgicc/Cgicc.h#includecgicc/HTTPHTMLHeader.h#includecgicc/HTMLClasses.husingnamespace std; usingnamespace cgicc;intmain(){Cgicc formData;bool maths_flag, physics_flag;cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout title向 CGI 程序传递复选框数据/title\n;cout /head\n;cout body\n;maths_flag formData.queryCheckbox(maths);if( maths_flag ) { cout Maths Flag: ON endl; }else{cout Maths Flag: OFF endl; }cout br/\n;physics_flag formData.queryCheckbox(physics);if( physics_flag ) { cout Physics Flag: ON endl; }else{cout Physics Flag: OFF endl; }cout br/\n;cout /body\n;cout /html\n;return0; }向 CGI 程序传递单选按钮数据当只需要选择一个选项时我们使用单选按钮。下面的 HTML 代码实例是一个带有两个单选按钮的表单form action/cgi-bin/cpp_radiobutton.cgi methodpost target_blank inputtyperadio namesubject valuemaths checkedchecked/ 数学 inputtyperadio namesubject valuephysics / 物理 inputtypesubmit value选择学科 / /form下面的 C 程序会生成 cpp_radiobutton.cgi 脚本用于处理 Web 浏览器通过单选按钮给出的输入。实例#includeiostream#includevector#includestring#includestdio.h#includestdlib.h#includecgicc/CgiDefs.h#includecgicc/Cgicc.h#includecgicc/HTTPHTMLHeader.h#includecgicc/HTMLClasses.husingnamespace std; usingnamespace cgicc;intmain(){Cgicc formData;cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout title向 CGI 程序传递单选按钮数据/title\n;cout /head\n;cout body\n;form_iterator fi formData.getElement(subject); if( !fi-isEmpty() fi ! (*formData).end()) { cout Radio box selected: **fi endl; }cout br/\n;cout /body\n;cout /html\n;return0; }向 CGI 程序传递文本区域数据当需要向 CGI 程序传递多行文本时我们使用 TEXTAREA 元素。下面的 HTML 代码实例是一个带有 TEXTAREA 框的表单formaction/cgi-bin/cpp_textarea.cgimethodposttarget_blanktextareanametextcontentcols40rows4 请在这里输入文本... /textareainputtypesubmitvalue提交 //form下面的 C 程序会生成 cpp_textarea.cgi 脚本用于处理 Web 浏览器通过文本区域给出的输入。实例#includeiostream#includevector#includestring#includestdio.h#includestdlib.h#includecgicc/CgiDefs.h#includecgicc/Cgicc.h#includecgicc/HTTPHTMLHeader.h#includecgicc/HTMLClasses.husingnamespace std; usingnamespace cgicc;intmain(){Cgicc formData;cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout title向 CGI 程序传递文本区域数据/title\n;cout /head\n;cout body\n;form_iterator fi formData.getElement(textcontent); if( !fi-isEmpty() fi ! (*formData).end()) { cout Text Content: **fi endl; }else{cout No text entered endl; }cout br/\n;cout /body\n;cout /html\n;return0; }向 CGI 程序传递下拉框数据当有多个选项可用但只能选择一个或两个选项时我们使用下拉框。下面的 HTML 代码实例是一个带有下拉框的表单formaction/cgi-bin/cpp_dropdown.cgimethodposttarget_blankselectnamedropdownoptionvalueMathsselected数学/optionoptionvaluePhysics物理/option/selectinputtypesubmitvalue提交//form下面的 C 程序会生成 cpp_dropdown.cgi 脚本用于处理 Web 浏览器通过下拉框给出的输入。实例#includeiostream#includevector#includestring#includestdio.h#includestdlib.h#includecgicc/CgiDefs.h#includecgicc/Cgicc.h#includecgicc/HTTPHTMLHeader.h#includecgicc/HTMLClasses.husingnamespace std; usingnamespace cgicc;intmain(){Cgicc formData;cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout title向 CGI 程序传递下拉框数据/title\n;cout /head\n;cout body\n;form_iterator fi formData.getElement(dropdown); if( !fi-isEmpty() fi ! (*formData).end()) { cout Value Selected: **fi endl; }cout br/\n;cout /body\n;cout /html\n;return0; }在 CGI 中使用 CookiesHTTP 协议是一种无状态的协议。但对于一个商业网站它需要在不同页面间保持会话信息。例如一个用户在完成多个页面的步骤之后结束注册。但是如何在所有网页中保持用户的会话信息。在许多情况下使用 cookies 是记忆和跟踪有关用户喜好、购买、佣金以及其他为追求更好的游客体验或网站统计所需信息的最有效的方法。它是如何工作的服务器以 cookie 的形式向访客的浏览器发送一些数据。如果浏览器接受了 cookie则 cookie 会以纯文本记录的形式存储在访客的硬盘上。现在当访客访问网站上的另一个页面时会检索 cookie。一旦找到 cookie服务器就知道存储了什么。cookie 是一种纯文本的数据记录带有 5 个可变长度的字段Expires : cookie 的过期日期。如果此字段留空cookie 会在访客退出浏览器时过期。Domain : 网站的域名。Path : 设置 cookie 的目录或网页的路径。如果您想从任意的目录或网页检索 cookie此字段可以留空。Secure : 如果此字段包含单词 secure那么 cookie 只能通过安全服务器进行检索。如果此字段留空则不存在该限制。NameValue : cookie 以键值对的形式被设置和获取。设置 Cookies向浏览器发送 cookies 是非常简单的。这些 cookies 会在 Content-type 字段之前与 HTTP 头一起被发送。假设您想设置 UserID 和 Password 为 cookies设置 cookies 的步骤如下所示实例#include iostream using namespace std;int main () {cout Set-Cookie:UserIDXYZ;\r\n;cout Set-Cookie:PasswordXYZ123;\r\n;cout Set-Cookie:Domainwww.w3cschool.cc;\r\n;cout Set-Cookie:Path/perl;\n;cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout titleCGI 中的 Cookies/title\n;cout /head\n;cout body\n;cout 设置 cookies endl; cout br/\n;cout /body\n;cout /html\n;return0; }从这个实例中我们了解了如何设置 cookies。我们使用 Set-Cookie HTTP 头来设置 cookies。在这里有一些设置 cookies 的属性是可选的比如 Expires、Domain 和 Path。值得注意的是cookies 是在发送行 Content-type:text/html\r\n\r\n 之前被设置的。编译上面的程序生成 setcookies.cgi并尝试使用下面的链接设置 cookies。它会在您的计算机上设置四个 cookies/cgi-bin/setcookies.cgi获取 Cookies检索所有设置的 cookies 是非常简单的。cookies 被存储在 CGI 环境变量 HTTP_COOKIE 中且它们的形式如下key1value1;key2value2;key3value3....下面的实例演示了如何获取 cookies。实例#includeiostream#includevector#includestring#includestdio.h#includestdlib.h#includecgicc/CgiDefs.h#includecgicc/Cgicc.h#includecgicc/HTTPHTMLHeader.h#includecgicc/HTMLClasses.husingnamespace std; usingnamespace cgicc;intmain(){Cgicc cgi;const_cookie_iterator cci;cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout titleCGI 中的 Cookies/title\n;cout /head\n;cout body\n;cout table border \0\ cellspacing \2\;// 获取环境变量const CgiEnvironment env cgi.getEnvironment();for( cci env.getCookieList().begin();cci ! env.getCookieList().end(); cci ){cout trtd cci-getName() /tdtd;cout cci-getValue(); cout /td/tr\n;}cout /table\n;cout br/\n;cout /body\n;cout /html\n;return0; }现在编译上面的程序生成 getcookies.cgi并尝试使用下面的链接获取您的计算机上所有可用的 cookies/cgi-bin/getcookies.cgi这会产生一个列表显示了上一节中设置的四个 cookies 以及您的计算机上所有其他的 cookies UserID XYZ Password XYZ123 Domain www.w3cschool.cc Path /perl 文件上传实例为了上传一个文件HTML 表单必须把 enctype 属性设置为 multipart/form-data。带有文件类型的 input 标签会创建一个 Browse 按钮。htmlbodyformenctypemultipart/form-dataaction/cgi-bin/cpp_uploadfile.cgimethodpostp文件inputtypefilenameuserfile //ppinputtypesubmitvalue上传 //p/form/body/html这段代码的结果是下面的表单 文件**注意**上面的实例已经故意禁用了保存上传的文件在我们的服务器上。您可以在自己的服务器上尝试上面的代码。下面是用于处理文件上传的脚本 cpp_uploadfile.cpp实例#includeiostream#includevector#includestring#includestdio.h#includestdlib.h#includecgicc/CgiDefs.h#includecgicc/Cgicc.h#includecgicc/HTTPHTMLHeader.h#includecgicc/HTMLClasses.husingnamespace std; usingnamespace cgicc;intmain(){Cgicc cgi;cout Content-type:text/html\r\n\r\n;cout html\n;cout head\n;cout titleCGI 中的文件上传/title\n;cout /head\n;cout body\n;// 获取要被上传的文件列表const_file_iterator file cgi.getFile(userfile);if(file ! cgi.getFiles().end()) {// 在 cout 中发送数据类型cout HTTPContentHeader(file-getDataType());// 在 cout 中写入内容file-writeToStream(cout);}cout 文件上传成功\n;cout /body\n;cout /html\n;return0; }上面的实例是在 cout 流中写入内容但您可以打开文件流并把上传的文件内容保存在目标位置的某个文件中。
http://www.w-s-a.com/news/851460/

相关文章:

  • 网站建设项目前景上海今天新闻综合频道
  • 做网站推销的如何谈客户wordpress怎么做商城
  • 摄影素材库网站服装页面设计的网站
  • 如何用国外网站做头条做个游戏app的费用大概多少
  • 网站 形象入口页福州网站建设网络公司排名
  • 免费下载教学设计的网站送网站建设管理信息内容审核制度
  • 外贸专业网站的公司百度旗下13个app
  • 物理组简介 网站建设高师院校语言类课程体系改革与建设 教学成果奖申报网站
  • 爱网站无法登录怎么回事手表网
  • 网站建设公司现在还挣钱吗山西手动网站建设推荐平台
  • 重庆建设工程交易信息网站网站制作公司起名
  • 东莞寮步做网站的有吗企业宣传册制作
  • 做网站的软件是哪个上蔡做网站
  • 前后端分离实现网站开发紧急通知网页升级
  • 河北专业网站建设公司推荐佛山小程序开发平台
  • 网站开发强制开启浏览器极速模式建设网站有什么风险
  • 360全景网站建设常州专业网站建设公司咨询
  • 重庆大渡口网站建设网站增加一体化建设功能的好处
  • 网站开发完整视频网站上传 404
  • 自适应网站做推广北京建设工程招标网
  • 外贸网站设计注意事项网上商城官网入口
  • 正规的营销型网站建设公司微官网是网站吗
  • 南京行业门户网站无锡阿里巴巴做网站
  • 河北省和城乡住房建设厅网站wamp wordpress打不开
  • 在哪个平台做网站比较好自动app优化
  • 有没有能帮人快速网站备案的机构个人学做网站
  • 凌云县 城市建设 网站西安市建网站
  • 织梦xml网站地图公众号公众平台
  • 长春省妇幼网站做四维学校网站系统破解版
  • 安阳免费搭建自己的网站个人网站做商城会怎样