用Delphi编写CGI程序(三)

Delphi 13 前瞻 - 解析RAD Studio 13 Ganymede Beta TMaskEdit// 类似VCL的掩码编辑99/99/0000;1;_';beginShowMessage('操作失败: ' + E.Message);end;对于我个人来说,最希望的还是Embarcadero把IDE稳定性提升下(如调试崩溃卡死),体验优化下(比如编辑器中混乱的波浪线警告和时常失效的提示)之后再增加新功能,但也许这是最难的,让我们一起期待下吧。 阅读详情
用Delphi编写CGI程序(三)
  也 许 各 位 读 者 感 到 CGI 程 序 有 一 种 神 秘 感, 在 这 一 部 分 将 讲 述 一 些 关 于 CGI 程 序 的 基 本 编 程 过 程。 您 读 了 之 后, 就 不 会 再 有 神 秘 感 了。

    3 、 CGI 规 范 的 其 他 问 题:

    也 许 各 位 读 者 感 到 CGI 程 序 有 一 种 神 秘 感, 在 这 一 部 分 将 讲 述 一 些 关 于 CGI 程 序 的 基 本 编 程 过 程。 您 读 了 之 后, 就 不 会 再 有 神 秘 感 了。

    首 先, 在 进 行 任 何 编 程 工 作 时, 将 一 个 大 任 务 分 成 许 多 小 任 务, 每 个 小 任 务 完 成 相 对 独 立 的 功 能。 许 多 人 不 愿 自 己 编 写 CGI 程 序, 就 是 因 为 觉 得 CGI 编 程 很 难。 其 实, 将 一 个 典 型 的 CGI 程 序 分 成 以 下 几 个 部 分, 再 一 一 解 决, 您 就 不 会 对 CGI 程 序 感 到 困 难 了:


    总 体 的 说, 在 浏 览 器 中 调 用 一 个 CGI 程 序 时, 服 务 器 首 先 要 找 到 CGI 程 序, 一 般 的, CGI 程 序 都 放 在 服 务 器 指 定 的 目 录 中, 在 我 们 的 OmniHTTPD 中, 在 cgi-bin 和 cgi-win 虚 拟 目 录 指 定 的 实 际 目 录 下, 分 别 为 c:/httpd/cgi-bin 和 c:/httpd/cgi-win 目 录。 您 可 以 在 OmniHTTPD 中 修 改 实 际 目 录, 也 可 以 添 加 虚 拟 目 录, 如: 将 虚 拟 目 录 cgi-test 指 定 为 c:/my-cgi ; 如 果 您 在 c:/my-cgi 目 录 下 有 一 个 名 为 test1.cgi 的 CGI 程 序, 您 可 以 在 浏 览 器 中 通 过 地 址 http://localhost/cgi-test/test1.cgi 调 用 它。

    在 正 常 情 况 下 服 务 器 找 到 了 浏 览 器 请 求 的 CGI 程 序, 就 产 生 了 此 CGI 程 序 的 一 个 进 程。 这 样, 浏 览 器 与 服 务 器 就 建 立 好 了 连 接。 一 旦 CGI 程 序 执 行 完 毕, 此 进 程 就 消 失, 连 接 也 消 失 了。 上 图 中 所 有 的 操 作 都 是 在 建 立 了 连 接 的 时 间 内 完 成 的, 因 此, 每 个 CGI 程 序 完 成 的 任 务 要 尽 可 能 小, 否 则, 会 占 用 服 务 器 的 大 量 时 间 和 资 源, 客 户 端 浏 览 器 的 等 待 时 间 也 会 很 长。

    在 上 面 的 图 中 您 可 以 看 到,CGI 程 序 一 般 分 为 数 据 输 入、 数 据 处 理 和 数 据 输 出 三 个 部 分; 有 时, 要 在 数 据 处 理 部 分 同 数 据 库 进 行 交 互( CGI 程 序 的 特 长 也 在 此)。 这 三 个 部 分 中, 数 据 输 入 和 数 据 输 出 有 严 格 的 规 范, 而 数 据 处 理 就 是 您 发 挥 想 象 力 的 地 方 了。 下 面, 我 将 着 重 讲 一 讲 数 据 输 入 和 数 据 输 出 的 规 范 及 注 意 事 项:

    在 以 前, 我 们 曾 列 出 了 CGI 程 序 所 用 的 几 乎 所 有 环 境 变 量。 其 中, 有 相 当 一 部 分 是 同 数 据 的 输 入 和 输 出 有 密 切 关 系 的。 下 面, 我 们 就 分 类 列 出 其 中 最 常 用 的 环 境 变 量:

    与 服 务 器 相 关 的 环 境 变 量:

GATEWAY_INTERFACE
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE

    与 客 户 机 相 关 的 环 境 变 量:

HTTP_ACCEPT
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_AUTHORIZATION
HTTP_CHARGE_TO
HTTP_FROM
HTTP_IF_MODIFIED_SINCE
HTTP_PRAGMA
HTTP_REFERER
HTTP_USER_AGENT

    与 请 求 相 关 的 环 境 变 量:

AUTH_TYPE
CONTENT_FILE
CONTENT_LENGTH
CONTENT_TYPE
OUTPUT_FILE
PATH_INFO
PATH_TRANSLATED
QUERY_STRING
REMOTE_ADDR
REMOTE_USER
REQUEST_LINE
REQUEST_METHOD
SCRIPT_NAME


    在 这 里 值 得 说 明 的 是 CONTENT_FILE 和 OUTPUT_FILE 。 在 Windows 3.1 和 DOS 上 没 有 很 多 语 言 可 以 通 过 标 准 输 入 输 出( STDIN 和 STDOUT ) 读 和 写, 所 以 用 这 两 个 变 量 代 替。 其 他 的 环 境 变 量 可 以 参 考 以 前 的 详 细 列 表。

    以 前 讲 过, GET 方 法 通 过 URL 传 递 数 据; POST 方 法 通 过 STDIN 传 递 数 据。 无 论 是 用 什 么 方 法, 数 据 传 递 过 程 中 数 据 是 经 过 编 码 的。 不 过, 我 们 不 用 担 心 编 码 和 解 码 的 问 题, 因 为 我 们 将 用 的 开 发 语 言 可 以 自 动 完 成 此 任 务: 在 Perl 中 是 cgi-lib.pl , 在 Delphi 中 是 TWebModule 等。

    头 信 息 在 CGI 编 程 中 也 是 非 常 重 要 的。 头 信 息 是 CGI 程 序 在 向 客 户 机 发 信 息 前 的 信 号。 有 三 个 主 要 的 头 信 息 类 型:

Content-type //向浏览器传递HTML
Location   //向浏览器传递新的URL
Status    //通常在CGI程序出错使用来检查错误

    Content-type 是 浏 览 器 处 理 的 信 息 类 型, 主 要 是 MIME 的 类 型。 定 义 的 方 法 为 类 型 和 子 类 型 的 组 合。 常 用 的 MIME 类 型 有: Text 、 Multipart 、 Message 、 Application 、 Image 、 Audio 和 Video 。

    例 如, CGI 程 序 要 向 浏 览 器 传 送 一 个 HTML 文 档 前, 应 先 传 送 text/html 。 用 Perl 书 写 如 下:

    print "Content-type:text/html/n/n"
    print "< h1> Hi everyone! < /h1>/n"

    Location 使 浏 览 器 转 向 新 的 URL 。 例 如:

    print "Location:http://www.chinabyte.com"

    这 段 Perl 程 序 使 浏 览 器 转 向 ChinaByte 的 主 页。

    Status 指 出 CGI 程 序 的 状 态, 通 常 在 CGI 程 序 出 错 使 用 来 检 查 错 误。 下 表 列 出 了 常 用 的 状 态 码 及 含 义:

代 码 结 果             描 述 
200  OK             请 求 正 常 满 足 
202  Accept           请 求 被 接 受, 处 理 中 
301  Moved            文 档 被 移 到 新 地 点 
302  Found            文 档 不 在 说 明 处, 但 在 服 务 器 别 处 
400  Bad Request HTTP      请 求 的 语 法 不 对 
401  Unauthorized        文 档 需 要 存 取 权 
403  Forbindden         服 务 器 拒 绝 访 问 文 档 
404  No Found          服 务 器 找 不 到 文 档 
500  Server Error        服 务 器 发 生 严 重 错 误 
502  Service Overloaded     服 务 器 忙, 无 法 处 理 请 求 


    这 一 讲 到 这 里 就 完 了。 各 位 有 了 这 些 CGI 的 基 础 知 识 后, 可 以 开 始 使 用 任 何 一 种 语 言 一 步 步 开 发 CGI 程 序 了。 我 再 一 次 告 诉 大 家, CGI 程 序 并 不 神 秘, 它 只 不 过 是 一 种 建 立 服 务 器 和 某 种 任 务 的 对 话。






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 调用php接口_php&nginx运行原理

一、什么是 CGICGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序编写者。web server(比如说nginx)只是内容的分发者。比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器...

weixin_39966376的博客 315

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

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

我心飞扬 8605

Delphi编写CGI程序(六)

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

zou5655的专栏 1094

delphi 调用php接口_利用PHP-FPM实现open_basedir绕过

原创:Mr.zhang合天智汇原创投稿活动:重金悬赏 | 合天原创投稿等你来0X00 安装模式在PHP中有以下几种常见的安装模式:1. CGI模式CGI是通用网关接口,HTTP服务器使用这样的接口程序来调用外部程序,外部程序可以使用任何计算机语言来编写,例如C,C++,Perl,Visual Basic,Shell等等,历史上用来编写CGI程序使用最广泛的是Perl语言。服务器在认为这是一个CGI...

weixin_39965490的博客 281

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

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

pcplayer的博客 944

Delphi编写CGI程序(一)

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

zou5655的专栏 1485

Delphi编写CGI程序(二)

Delphi编写CGI程序(二)   在 上 一 讲 中, 我 们 介 绍 了 CGI 程 序 的 功 能。 今 天, 我 们 进 入: 第 二 部 分、 CGI 程 序 设 计 的 概 念 。本 讲 的 内 容 是 深 入 了 解 CGI 程 序 的 基 础。 本 系 列 讲 座 是 用 Delphi 编 写 CGI 程 序, 对 于 本 次 的 内 容 Del

zou5655的专栏 1492

Delphi编写CGI程序(五)

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

zou5655的专栏 962

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或ISAPI

因为dll文件已驻留内存,可用intrabob进行调试,也可用PWS进行调试,不过要换文件。   IntraBob是资深程序员Dr.Bob编写的免费工具软件,用于测试Delphi编写CGI/WinCGI/ISAPI程序,它可以代替PWS/IIS等WWW服务器软件, 调试本地的CGI/WinCGI/ISAPI程序,其原理是模拟PWS/IIS接受WWW请求, 并根据您的设置将类

踏雪无痕 2776
上一篇: 用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、付费专栏及课程。

余额充值