- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章用Ruby进行CGI编程的入门指引由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
编写CGI脚本:
最基本的Ruby CGI脚本看起来像这样:
1
2
3
4
5
|
#!/usr/bin/ruby
puts
"HTTP/1.0 200 OK"
puts
"Content-type: text/html\n\n"
puts
"<html><body>This is a test</body></html>"
|
如果调用这个脚本 test.cgi 上传到基于Unix/Linux的Web托管服务提供商并具有合适的权限,那么可以将它作为一个CGI脚本使用.
例如,如果有一个Linux的Web托管服务提供商托管的网站,如:http://www.yiibai.com/test.cgi 的主目录,并给它执行权限,那么访问 http://www.yiibai.com/test.cgi 应该返回一个HTML页面显示:This is a test. 。
这里时当 test.cgi 从Web浏览器请求,Web服务器看执行使用Ruby解释器它。 Ruby脚本返回一个基本的HTTP头,然后返回一个基本的HTML文档。 使用 cgi.rb
Ruby有一个特殊的称为CGI库,使更复杂的交互相比前面的CGI脚本.
让我们创建一个基本的CGI使用CGI脚本:
1
2
3
4
5
6
7
|
#!/usr/bin/ruby
require
'cgi'
cgi =
CGI
.
new
puts cgi.header
puts
"<html><body>This is a test</body></html>"
|
在这里,创建了一个CGI对象,并用它来打印标题行。 表单处理:
使用CGI类使可以访问HTML查询参数有两种方法。假设我们给出 /cgi-bin/test.cgi?FirstName=Zara&LastName=Ali. 。
可以访问参数FirstName和LastName使用CGI#[]如下:
1
2
3
4
5
6
|
#!/usr/bin/ruby
require
'cgi'
cgi =
CGI
.
new
cgi[
'FirstName'
]
# => ["Zara"]
cgi[
'LastName'
]
# => ["Ali"]
|
还有另一种方法来访问这些表单变量。此代码会给出所有的项和值的哈希值:
1
2
3
4
5
6
7
|
#!/usr/bin/ruby
require
'cgi'
cgi =
CGI
.
new
h = cgi.params
# => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h[
'FirstName'
]
# => ["Zara"]
h[
'LastName'
]
# => ["Ali"]
|
以下是代码来检索所有的键:
1
2
3
4
5
|
#!/usr/bin/ruby
require
'cgi'
cgi =
CGI
.
new
cgi.keys
# => ["FirstName", "LastName"]
|
如果表单包含多个具有相同名称的字段,对应的值将被返回到脚本中为一个数组。[]存取器返回这些的只是第一个.
在这个例子中,假设名为“name”的表单有三个字段,我们输入了三个名字 "Zara", "Huma" and "Nuha"
1
2
3
4
5
6
7
8
|
#!/usr/bin/ruby
require
'cgi'
cgi =
CGI
.
new
cgi[
'name'
]
# => "Zara"
cgi.params[
'name'
]
# => ["Zara", "Huma", "Nuha"]
cgi.keys
# => ["name"]
cgi.params
# => {"name"=>["Zara", "Huma", "Nuha"]}
|
注:Ruby的会自动处理GET和POST方法。没有单独的处理这两种不同的方法.
一个相关的,但基本形式,可以发送正确的数据,将有HTML代码,就像这样:
1
2
3
4
5
6
7
8
9
10
11
|
<
html
>
<
body
>
<
form
method
=
"POST"
action
=
"http://www.example.com/test.cgi"
>
First Name :<
input
type
=
"text"
name
=
"FirstName"
value
=
""
/>
<
br
/>
Last Name :<
input
type
=
"text"
name
=
"LastName"
value
=
""
/>
<
input
type
=
"submit"
value
=
"Submit Data"
/>
</
form
>
</
body
>
</
html
>
|
创建表单和HTML:
CGI包含大量的方法用于创建HTML。会发现每个标签的方法之一。为了使这些方法,必须通过调用CGI.new创建一个CGI对象.
为了使标签更容易嵌套,这些方法拿自己的内容作为代码块。代码块返回一个字符串,这将在作为标签的内容。例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/usr/bin/ruby
require
"cgi"
cgi =
CGI
.
new
(
"html4"
)
cgi.out{
cgi.html{
cgi.head{
"\n"
+cgi.title{
"This Is a Test"
} } +
cgi.body{
"\n"
+
cgi.form{
"\n"
+
cgi.hr +
cgi.h1 {
"A Form: "
} +
"\n"
+
cgi.textarea(
"get_text"
) +
"\n"
+
cgi.br +
cgi.submit
}
}
}
}
|
注:CGI类的方法可以接受的方法参数,这将设置HTTP方法(GET,POST等)上使用的表单提交。缺省情况下,在这个例子中使用的是POST.
这将产生以下结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Content-Type: text/html
Content-Length: 302
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">
<
HTML
>
<
HEAD
>
<
TITLE
>This Is a Test</
TITLE
>
</
HEAD
>
<
BODY
>
<
FORM
METHOD
=
"post"
ENCTYPE
=
"application/x-www-form-urlencoded"
>
<
HR
>
<
H1
>A Form: </
H1
>
<
TEXTAREA
COLS
=
"70"
NAME
=
"get_text"
ROWS
=
"10"
></
TEXTAREA
>
<
BR
>
<
INPUT
TYPE
=
"submit"
>
</
FORM
>
</
BODY
>
</
HTML
>
|
引用字符串:
当处理URL和HTML代码,您必须谨慎地引用一些字符。例如,一个斜杠字符(/)在URL中具有特殊的意义,所以它必须被转义,如果它不是部分路径名.
例如,/查询URL部分将被翻译成字符串%2F/,使用它时必须翻译。空间和与符号特殊字符。为了处理这个问题,CGI提供:在例行程序 CGI.escape 和 CGI.unescape. 。
1
2
3
4
|
#!/usr/bin/ruby
require
'cgi'
puts
CGI
.escape(Zara Ali/
A
Sweet & Sour Girl")
|
这将产生以下结果:
1
2
3
4
5
6
|
Zara+Ali%
2FA
Sweet+%
26
+Sour+Girl")
#!/usr/bin/ruby
require
'cgi'
puts
CGI
.escapeHTML(
'<h1>Zara Ali/A Sweet & Sour Girl</h1>'
)
|
这将产生以下结果:
1
|
<h1>Zara Ali/
A
Sweet & Sour Girl</h1>'
|
。
最后此篇关于用Ruby进行CGI编程的入门指引的文章就讲到这里了,如果你想了解更多关于用Ruby进行CGI编程的入门指引的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
嗨,我是一名学生,正在实习。不幸的是,我的公司要我用 C 编写 CGI 程序。我不知道他们为什么要使用它。无论如何,我必须在接下来的 2 个月内学习并应用它。我如何以及如何学习 CGI 编程。我有 2
CGI 脚本应该可以访问由 Web 服务器设置的环境变量列表。他们的名字是什么? 最佳答案 有关 CGI 规范,请参阅 RFC 3875,其中包含您需要的所有信息。 :-) 来自 RFC: met
CGI 是通用网关接口(interface)。顾名思义,它是所有事物的“通用”网关接口(interface)。从名字上看,它是如此琐碎和幼稚。我觉得我明白了这一点,每次遇到这个词都有这样的感觉。但坦白
我试图在 uhttpd 服务器 上执行 Cgi-Cpp 程序,该服务器运行 OpenWRT 安装。 Cgi 文件是 /www/cgi-bin/sample.cgi 并且也有执行权限。我正在尝试使用 H
我在目录下有一个 cpanel 帐户: /home/username/ 和一个文件: /home/username/public_html/ 这是index.php 其中包含:
我正在尝试修改我的 EasyPHP 以在 CGI 模式下运行。 根据此链接:http://www.easyvitools.com/phpserial/php_ser_reference.html我必须
有没有办法阻止 lighttpd 将 POST 缓冲到 CGI 可执行文件? 在我看来,所有请求在转发到 CGI 可执行文件之前都已完全缓冲在磁盘上,这使我无法以基于流的方式处理输入。 澄清一下,我只
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
这个问题在这里已经有了答案: Why does my system call to another CGI script work on the command line but not when
我正在设计一个应用程序,它将由 3-4 个服务组成,这些服务作为单独的进程运行并通过合适的 IPC 链接。该系统将有一个网络界面,我想使用那里的任何网络服务器。 应该在某个 URL 下访问 Web 界
这更多是为了理解 web 应用程序中的请求-响应机制。客户端向 Web 应用程序发送请求 (GET/POST)。 Web 应用程序有一个正在运行的应用程序服务器,该服务器用作应用程序特定程序的容器。我
这个问题在这里已经有了答案: Why does my system call to another CGI script work on the command line but not when
我遇到了这个问题:当我访问 URL“bobbabr.org”时,这是正常的,但是当我访问子域“ibobba.bobbabr.org”时,我被重定向到“/cgi-sys/defaultwebpage.c
我在虚拟机上运行的 Win 2k8 R2 上安装了 Mercurial 1.8.1、Python 2.6.6。我试过从 msi、源和使用 tortisehg 安装。命令行 Hg 工作正常,但在运行 h
我正在使用 cgi-bin 并显示一张 map ,其中包含来自 Postgres 数据库的一些数据。 但是,我需要引入一个输入,用户可以在其中选择一个日期,这个日期将从数据库中过滤结果。 我有输入并通
我目前正在尝试为我在带有 Ubuntu 的虚拟机上运行的实际本地网页创建一个简单的登录页面。 我创建了 LoginPage.html在位置 /var/www/html . 然后 HTML 文件调用 l
有谁知道如何配置 lighttpd 来处理普通的 CGI 可执行文件,在这种情况下是用 C 编写的?我已经编译了一个测试程序(test.cgi)并将它放在$HOME/public_html/cgi-b
我有一个 scriptA.cgi,它调用 scriptB.cgi。 scriptB.cgi 需要一个参数。 我都试过了在我尝试过的 scriptA.cgi 中: `perl -l scriptB.cg
我正在尝试让 Python、cgi 模块、ajax/javascript 组合工作。由于我的服务器访问的性质(基本上是租用的网站空间),我无法安装 django 或任何其他网络框架之类的东西。我现在坚
我在 Ubuntu 服务器上安装了标准的 Apache2。默认设置使用 ScriptAlias 将 /cgi-bin/ 引用到 /usr/lib/cgi-bin/。如果我将 Python CGI 脚本
我是一名优秀的程序员,十分优秀!