用Delphi编写CGI程序(二)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
用Delphi编写CGI程序(二)
  在 上 一 讲 中, 我 们 介 绍 了 CGI 程 序 的 功 能。 今 天, 我 们 进 入: 第 二 部 分、 CGI 程 序 设 计 的 概 念 。本 讲 的 内 容 是 深 入 了 解 CGI 程 序 的 基 础。

本 系 列 讲 座 是 用 Delphi 编 写 CGI 程 序, 对 于 本 次 的 内 容 Delphi 已 经 封 装 在 它 的 类 中, 您 也 许 认 为 本 讲 没 有 必 要。 但 我 认 为 CGI 的 优 势 之 一 是 可 用 的 开 发 语 言 多( 下 面 将 提 到 这 个 问 题), 而 本 讲 的 内 容 可 用 于 任 何 程 序 设 计 语 言 中( 包 括 Delphi )。 所 以, 要 发 挥 CGI 的 优 势, 本 讲 的 内 容 还 是 必 要 的; 再 说, 本 讲 的 内 容 是 深 入 了 解 CGI 程 序 的 基 础。

2 、 CGI 规 范:

    通 常, WEB 服 务 器 是 一 台 功 能 强 大 的 计 算 机, 但 不 可 能 利 用 所 有 处 理 能 力。 CGI 的 产 生 使 得 人 们 可 以 用 WEB 服 务 器 的 处 理 能 力 为 远 程 客 户 提 供 有 趣 的、 动 态 的 内 容。 CGI 规 范 应 用 于 WEB 服 务 器 及 运 行 在 WEB 上 的 应 用 程 序。 它 不 是 HTTP 协 议 的 一 部 分, 但 大 多 数 WEB 服 务 器 都 支 持 这 个 规 范, 如 NCSA httpd 、 CERN httpd 、 Apache httpd 、 IIS 及 我 们 使 用 的 OmniHTTPD 。

2.1 、 CGI 概 览

    CGI 定 义 WEB 服 务 器、 浏 览 器 和 应 用 程 序 之 间 的 相 互 操 作 中 共 同 遵 守 的 规 则 集。 例 如 通 过 WEB 浏 览 器 查 询 远 程 数 据 库 系 统:


2.2 、 语 言:

    CGI 程 序 可 以 使 用 WEB 服 务 器 上 可 以 执 行 的 任 何 语 言 来 编 写。 您 应 该 选 用 最 熟 悉 和 最 适 合 目 前 工 作 的 语 言。 如: Perl 语 言 适 合 字 符 串 和 文 件 处 理, C 对 大 型 的、 复 杂 的 程 序 更 合 适, Visual Basic 和 Delphi 则 适 合 数 据 库 的 处 理, 等 等。 下 面 是 常 用 的 CGI 编 程 语 言:

C
C++
Perl
Tcl
Python
Shell Scripts
Visual Basic
Delphi
Applescript

2.3 、 CGI 方 法:
    调 用 CGI 的 途 径 称 为 CGI 方 法。 主 要 有 三 种 CGI 方 法:

2.3.1 、 GET 方 法:
    GET 方 法 是 浏 览 器 向 WEB 服 务 器 提 出 请 求 的 方 法。 使 用 这 种 方 法 时, CGI 程 序 从 环 境 变 量 QUERY_STRING 中 获 取 数 据。 CGI 程 序 为 了 得 到 输 入 的 参 数, 必 须 分 析 这 个 环 境 变 量。 当 传 输 的 数 据 很 长 时, 应 使 用 POST 方 法。

2.3.2 、 POST 方 法:
    使 用 POST 方 法 时, CGI 程 序 从 stdin ( 标 准 输 入) 得 到 输 入 数 据。 由 于 输 入 数 据 的 最 后 没 有 EOF ( 文 件 结 束 标 志 End Of File ), CGI 程 序 为 了 正 确 读 取 输 入 数 据, 必 须 使 用 环 境 变 量 CONTENT_LENGTH 值。 用 这 种 方 法 的 最 大 优 点 在 于 可 以 传 输 大 量 数 据, 而 GET 方 法 由 于 受 URL 长 度 的 限 制( 一 般 不 超 过 1024 字 节), 无 法 传 输 大 量 数 据。 这 时, POST 方 法 是 唯 一 的 选 择。

2.3.3 、 HEAD 方 法:
    HEAD 方 法 基 本 同 于 GET 方 法, 只 是 它 是 从 WEB 服 务 器 向 浏 览 器 传 输 数 据。 而 且, 传 输 的 仅 仅 是 HTTP 的 头 信 息。

2.4 、 接 口 规 范:
    下 面 将 介 绍 WEB 服 务 器 与 CGI 程 序 通 信 的 四 种 主 要 方 法: 环 境 变 量、 命 令 行、 标 准 输 入 和 标 准 输 出。( 根 据 CGI Version 1.1 给 出)

2.4.1 、 环 境 变 量:

AUTH_TYPE : 如 果 服 务 器 支 持 确 认 并 且 脚 本 得 到 保 护, 给 出 确 认 的 类 型。

CONTENT_LENGTH : 给 出 以 字 节 为 单 位 的 用 POST 方 法 传 输 的 数 据 长 度。 用 GET 方 法 时 变 量 为 空。

CONTENT_TYPE : 给 出 用 POST 方 法 时 传 输 数 据 的 MINE 类 型。 当 使 用 GET 方 法 时 变 量 为 空。 如: application/x-www-form-urlencoded 。

GETWAY_INTERFACE : 给 出 CGI 规 范 名 和 版 本 号, 如: CGI/1.1 。

PATH_INFO : 给 出 了 URL 中 CGI 程 序 名 之 后 的 附 加 路 径 信 息。

PATH_TRANSLATED : CGI 程 序 的 物 理 路 径, 通 常 是 WEB 根 目 录、 脚 本 名 和 附 加 路 径 信 息。

QUERY_STRING : URL 中 " ? " 字 符 后 的 信 息。 使 用 GET 方 法 时 此 环 境 变 量 给 出 输 入 数 据。

REMOTE_ADDR : 提 出 请 求 的 远 程 计 算 机 的 IP 。

REMOTE_HOST : 提 出 请 求 的 远 程 计 算 机 的 名 字。

REMOTE_IDENT : 给 出 RFC 931 中 定 义 的 用 户 名。

注: RFC 931 是 Internet 的 权 威 文 档, 描 述 了 确 认 TCP 连 接 中 识 别 用 户 的 方 法。 文 档 在: http://sunsite.auc.dk/RFC/rfc/rfc931.html 。

REMOTE_USER : 给 出 提 出 请 求 的 客 户 端 的 授 权 用 户 名。

REQUEST_METHOD : 提 出 请 求 的 方 法, 可 以 是 GET 、 HEAD 和 POST 。

SCRIPT_NAME : 要 执 行 CGI 程 序 的 虚 拟 路 径, 如: /cgi-bin/query.cgi 。

SERVER_NAME : 运 行 WEB 服 务 器 软 件 的 计 算 机 域 名 或 IP 地 址, 如: www.chinabyte.com 。

SERVER_PORT : WEB 服 务 器 的 端 口 号, 缺 省 值 是 80 。

SERVER_PROTOCOL : WEB 服 务 器 使 用 的 协 议 名 和 版 本 号, 如: HTTPD/1.0 。

SERVER_SOFTWARE : 执 行 CGI 程 序 的 WEB 服 务 器 名。 格 式 为 " 服 务 器 名 / 版 本 号 " , 如: NCSA/1.5b5 。

HTTP_ACCEPT : 客 户 端 发 送 的 "Accpect : 标 题 行 " , 对 应 于 客 户 端 能 处 理 的 MIME 类 型, 格 式 为 " 类 型 / 子 类 型, 类 型 / 子 类 型 等 " , 如: */* , image/gif , image/jpeg 。

HTTP_REFERER : 是 Referer : 标 题 行 的 目 录, 包 含 了 CGI 请 求 时 的 表 单( Form ) 的 URL , 如: http://www.chinabyte.com/register.form 。

HTTP_USER_AGENT : 提 出 请 求 的 客 户 端 浏 览 器 名, 如: Mozilla/1.2N ( Windows;I;32bit )。

    以 上 的 这 些 环 境 变 量 您 可 以 用 上 一 讲 的 示 范 程 序 看 到。

2.4.2 、 命 令 行:

    CGI 命 令 行 只 在 用 ISINDEX 查 询 时 才 用 到。 ISINDEX 查 询 是 包 含 在 < ISINDEX> 和 < BASE HREP=".."> 之 间 的 特 殊 查 询。 命 令 行 可 以 带 多 个 参 数。

2.4.3 、 标 准 输 入:

    使 用 POST 方 法 时, CGI 程 序 从 stdin 得 到 传 输 数 据。 前 面 讲 过, 必 须 使 用 CONTENT_TYPE 和 CONTENT_LENGTH 环 境 变 量 值。 其 中 要 注 意 的 是, 数 据 中 的 URL 被 编 码 了, 如 空 格 用 加 号 代 替、 ~ 由 %7E 代 替 等。

2.4.4 、 标 准 输 出:

    CGI 程 序 通 过 标 准 输 出 将 数 据 送 给 浏 览 器, 或 是 WEB 服 务 器 可 解 释 的 命 令。 CGI 程 序 可 以 通 过 WEB 服 务 器 同 浏 览 器 对 话, 它 们 的 程 序 名 必 须 以 "nph-" 开 头, 代 表 未 经 分 析 的 头 信 息。 CGI 程 序 负 责 返 回 给 浏 览 器 的 HTTP 头 信 息 的 正 确 性。

    在 不 使 用 nph- 程 序 时, 服 务 器 查 找 CGI 可 能 返 回 的 三 种 特 殊 的 头 信 息:

Content-type : MIME 类 型 的 头 信 息, 如: 输 入 HTML 时, 常 用 "Content-type:text/html/n/n" 。

Location : 告 知 服 务 器 你 正 指 向 别 的 文 档。 服 务 器 或 者 重 定 向 客 户, 或 者 发 送 文 档 内 容, 这 取 决 于 URL 是 完 整 路 径 还 是 相 对 路 径。

Status : 服 务 器 送 给 客 户 端 的 状 态 行。 格 式 为: nnnXXXXX , nnn 是 一 个 三 位 数 编 码, 而 XXXXX 是 相 对 应 的 描 述 文 本。



Delphi编写CGI程序(四) Delphi编写CGI程序(四) 从 这 一 讲 开 始,我 们 将 进 入 CGI 程 序 设 计 的 学 习 过 程。通 过 前 面 几 讲 的 学 习,您 已 经 掌 握 了 CGI 程 序 设 计 的 基 础 知 识。现 在,您 可 以 坐 下 来 编 写 CGI 程 序 了!  三、CGI 程 序 设 计   1、服 务 器 端 附 件 (SSI) 阅读详情

相关推荐

Delphi开发CGI

<br />------------------------------------这是以前写下的---------------------------------------<br /> <br /> <br /> <br />在JAVA泛滥、ASP.net 漫山遍野的今天,也许,大家认为CGI是一种落后的技术,但,也许大家有所不知的是CGI是一种效率很高的编程方式。因为,在前端,CGI不用面对复杂的网络请求过程,而后端输出,又是可以直接输出给浏览器。<br /><br /> 宝刀未老的PERL,是CG

小橙的第一播 4205

delphi CGI

delphi 实现CGI EXE程序,自带的webservice生产的在IIS下无法运行,本例详细写明了CGI程序的结构,目前在网上还没发现类似的资源。 共朋友们分享。 写这样一个CGI的初衷:原本有一个CGI,想写一个类似的名称的程序代替,只能用exe cgi,如果是自己开始开发,就没必要这么麻烦了

Delphi编写soap服务器与客户端程序

Delphi编写soap服务器与客户端程序使用三层结构开发客户机、服务器软件已成为c/s系统中的主流;下面是自己在开发系统中的一些体会;本文已delphi7(windows)或kylix3(linux9)为环境描述:1、编写服务器程序      首先,看看soap服务器的建立,在delphi7中的新建栏目中,选择“ WebServices”如下图,选择“Soap Server Applicat

我心飞扬 8605

Delphi编写CGI程序(一)

Delphi编写CGI程序(一)   1.0 、 CGI 程 序 的 功 能:     首 先, 什 么 是 公 共 网 关 接 口( CGI ) 呢? CGI 是 一 个 用 于 定 义 WEB 服 务 器 与 外 部 程 序 之 间 通 信 方 式 的 标 准, 使 得 外 部 程 序 能 生 成 HTML 、 图 象 或 者 其 他 内 容, 而 服 务 器

zou5655的专栏 1485

如何设置 IIS 用以运行Delphi 编译的 CGI 程序

结合一些好的前端库,可以很简单地作出非常漂亮功能强大的基于 WEB 页面的程序。具体做法这里就不细说了。在 Delphi 里面新建一个 Web Server 的工程,选择 IIS CGI 以后,这个工程编译出来的就是一个 Windows 的 Exe 可执行文件,它就是可以在 IIS 底下被 IIS 调用的 CGI 程序。额外说一句:Delphi 还可以编译出。

pcplayer的博客 944

apache下部署delphi写的cgi

1.安装好apache服务器。 2.将cgi(一般是exe)拷贝到cgi-bin文件夹改后缀为cgi. 3.访问http://xx:port/cgi-bin/cgi-name.cgi 这样就可以了。

沧海一粟 1048

如何在Delphi6中调试web程序步骤

1.新建一个web工程,请选中最下面一项:Web App Debugger executable,Coclass name我们设为demo1; 2.在弹出的WebModule2中右击,在弹出的Action编辑框中新建一个webaction,选中,设置Default属性为True,在其onaction事件中编写如下代码,输出一个仅显示‘hello,dephi!’的html页; 3

踏雪无痕 1297

Delphi编写CGI程序(三)

Delphi编写CGI程序(三)   也 许 各 位 读 者 感 到 CGI 程 序 有 一 种 神 秘 感, 在 这 一 部 分 将 讲 述 一 些 关 于 CGI 程 序 的 基 本 编 程 过 程。 您 读 了 之 后, 就 不 会 再 有 神 秘 感 了。    3 、 CGI 规 范 的 其 他 问 题:     也 许 各 位 读 者 感 到 CGI

zou5655的专栏 1158

Delphi编写CGI程序(五)

Delphi编写CGI程序(五)   CGI 程 序 的 功 能 是 强 大 的, 但 正 是 因 为 如 此 , 如 果 您 作 为 CGI 开 发 人 员 或 系 统 管 理 人 员 不 注 意 编 写 和 设 置 CGI 程 序 的 话,将 使 您 的 系 统 千 疮 百 孔。 本 篇 就 CGI的 安 全 性 问 题 做 一 讨 论。 3 、 CGI

zou5655的专栏 962

Delphi编写CGI程序(六)

Delphi编写CGI程序(六)    在 前 面 的 几 个 章 节 里 , 我 们 完 成 了 CGI 程 序 的 一 般 论 述 。 在 此 , 我 给 出 一 个 简 单 的 示 范 程 序 作 为 对 以 前 的 内 容 的 总 结 。     要 使 用 这 个 程 序 , 您 需 要 OmniHTTPD 的 最 新 测 试 版 : OmniHTTPD

zou5655的专栏 1093

Delphi编写CGI程序返回图象

珠海西门子表计公司  汪永荣  ---- Delphi 4.0对Internet编程提供了强大的支持,Delphi 4.0编写CGI非常容易, Delphi 4.0本身提供了例程。但是笔者在实践中遇到需要CGI程序根据数据库动态 返回图象的情况,很多文章推进使用Cgi-Expert或有关的OCX控件,使用控件不仅 带来额外的开销,且缺乏灵活性,那么能否不使用这些控件自己编写代码实现,现 推荐一

1245

webservices:dotnet调用delphi写的cgi

最近写了一个关于dotnet调用delphi写的cgi程序,参考了网上很多网友发的帖子,这里我将大家的内容加上我自己的心得写一篇,让后来像我这样的小虾少走点弯路。  一、用打开Delphi7.0的开发环境,依次选择New | Other | WebServices | SOAP Server Application,然后选择CGI Stand-alone executable

ilovedotnetthandelph的专栏 901

IIS7 CGI 的设置 -- IIS 下运行 Delphi 编译的 CGI 程序

修改 IIS7 设置如下,参考了 Dr. Bob 的:http://www.drbob42.com/examine/examinC3.htm IIS7 安装完后,不能运行 Delphi 编译的 CGI exe 程序。需要做如下设置: 1. 在 IIS7 的管理器里面,选择左边的最顶层的电脑,而不是电脑下的网站,右边才会有 “ISAPI 和 CGI 限制”这个图标。点开,添加一个 C

pcplayer的博客 3020

CGI程序工作原理

     1. 定义      即Common Gateway Interface,它提供一个计算机程序同HTTP协议或者WWW服务的接口,也就是人机交互接口;有了它,服务器可以提供交互式的站点以代替过去静态的文本和图象。CGI通常使用PERL、C/C++、DELPHI等进行编写。     2. 功能    绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的

northstar888的专栏 1328

CGI 相关知识

总是在程序中遇到cgi.server_name                        cgi.script_name            然后就好奇什么是cgi,后来发现这些都是cgi在客户向web服务器post,get时候所请求的参数。           具体呢提供下面内容参考http://www.wangchao.net.cn/bbsdetail_21148.htm

lovejavalovejava的专栏 1309

Delphi编写Web Service(实例)(续,用Delphi编写客户端)

继昨天晚上一文:http://blog.csdn.net/yxf/archive/2006/09/28/1303281.aspx ,现在写写用Delphi编写客户端的方法。同样还是调用昨晚的libss.dll。1. 新建个Console Application,叫SampleService.Invoker。2. File->New->Other, Web Services/WSDL Im

Sono simpatico... 3477

深入delphi编程

刚刚接触的delphi的朋友,可能最感兴趣的就是它丰富、强大的vcl(可视化构件库)。仅仅向窗体上扔几个构件,甚至不用动手写代码,就能很容易地做出一个有实用价值的程序,真是令人激动。但是,vcl只是delphi的一小部分,delphi的优秀远远不只是表现在vcl上。如果你仅仅停留在使用vcl这一阶段,那么你永远也不可能成为一个真正的delphi高手。记住,必须超越vcl,才能够接触到delphi

softworkman的专栏 2021

Python CGI学习与测试

一、 简介 公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写...

qq_41392015的博客 724
上一篇: 用Delphi编写CGI程序(一)
下一篇: 用Delphi编写CGI程序(三)
zou5655
博客等级 码龄25年 2粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值