CGI编程

一、CGI编程

http://www.w3cschool.cc/python/python-cgi.html(里面实例很详细)

简单编程过程:

1.服务器的结构创建:

首先要一个web根目录(这里是web-app文件夹),所有的CGI或者py文件要存放在cgi-bin目录下,html则不能存放在该目录下。

2.启动python的web服务器(适合简单的测试)

python -m CGIHTTPServe

3.编辑脚本

[[email protected] cgi-bin]# cat test.cgi

#!/usr/bin/python

print "Content-type:text/plain"

print #打印空行来结束首部,没有空行则也无法解析

print "hello!"

[[email protected] cgi-bin]#

#!/usr/bin/python   要加入pound bang行(必须是第一行)

print "Content-type:text/plain"表示页面是普通文件,如果页面是html文件,则应该为 print "Content-type:text/html"

[[email protected] cgi-bin]# cat test1.cgi

#!/usr/bin/python                   #必须加这一行内容指定python,否则也无法执行脚本。

# -*- coding: utf-8 -*-

# 导入cgi模块,以便后面调用相关方法,这个简单例子可以不用写

import cgi

# 向CGI脚本返回结果的时候,先返回一个 http头文件,不然得不到 http。这一步不能省略

header = ‘Content-Type: text/html\n\n‘

html = ‘<h3>hello world</h3>‘

#打印返回的内容

print header         #因为前面已经在文本中换行,这里没换行也没错。

print html

[[email protected] cgi-bin]#

4.设置文件许可

chmod +755 filename

5.访问测试

http://IP:8000/cgi-bin/test1.cgi

效果:

注意:在cgi-bin目录下的文件不一定要命名为.cgi,用.py也可以。

6.使用cgitb调试

[[email protected] cgi-bin]# cat test3.py

#!/usr/bin/python

import cgitb

cgitb.enable()

print "Content-type: text/html"

print

print 1/0

print "hello!"

[[email protected] cgi-bin]#

调试结果:

7.cgi模块的使用

例1(getvalue获取值):

[[email protected] cgi-bin]# cat test4.py

#!/usr/bin/python

import cgi

form = cgi.FieldStorage()

name= form.getvalue(‘name‘,‘world‘)

print ‘Content-type: text/plain‘

print

print ‘hello,%s‘ % name

[[email protected] cgi-bin]#

例2(简单表单的处理):

form.html

<!doctype html>

<html>

    <head>

        <title>

            hello
python cgi

        </title>

    </head>

    <body>

        <form action="/cgi-bin/form.py">

            <label for="">username:</label><input type="text" name="username" value="username">

            <label for="">password:</label><input type="password" name="password" value "">

            <input type="submit">

        </form>

    </body>

</html>

form.py文件

#!/usr/bin/python

# -*- coding: utf-8 -*-

import cgi

header = ‘Content-Type: text/html\n\n‘

html = ‘<h3>接受处理表单数据\n</h3>‘

#打印返回的内容

print header

print html

# 接受表达提交的数据

form = cgi.FieldStorage()

print ‘接收表达get的数据 :‘,form

print ‘<p />‘

# 解析处理提交的数据

username = form[‘username‘].value                   #也可以username = form.getvalue(‘username‘)用getvalue获取

password = form[‘password‘].value

formhtml = ‘‘‘

<label for="">username:</label><input type="text" value="%s">

<label for="">password:</label><input type="text" value = "%s">

‘‘‘

print formhtml % (username,password)

结果分析:

例3(修改name,并显示修改):

[[email protected] cgi-bin]# cat test4.py

#!/usr/bin/python

import cgi

form = cgi.FieldStorage()

name= form.getvalue(‘name‘,‘world‘)

print ‘Content-type: text/html‘

print

#print ‘hello,%s‘ % name

print """

<html>

<head>

<title>change name</title>

</head>

<body>

<h1>hello.%s!</h1>

<form action=‘test4.py‘>

change name <input type=‘text‘ name=‘name‘ />

<input type=‘submit‘/>

</form>

</body>

</html>

""" % name

[[email protected] cgi-bin]#

HTTP头部

文件内容中的" Content-type:text/html\r\n\r\n"即为HTTP头部的一部分,它会发送给浏览器告诉浏览器文件的内容类型。

HTTP头部的格式如下:

HTTP 字段名: 字段内容

例如
Content-type: text/html\r\n\r\n

以下表格介绍了CGI程序中HTTP头部经常使用的信息:

描述
Content-type: 请求的与实体对应的MIME信息。例如: Content-type:text/html
Expires: Date 响应过期的日期和时间
Location: URL 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源
Last-modified: Date 请求资源的最后修改时间
Content-length: N 请求的内容长度
Set-Cookie: String 设置Http Cookie

错误分析:

1.

解决:

cgi或py文件中要有print "Content-type:text/plain"这句,不然无法解析

2.在Apache服务中尝试用cgi-bin

不能命名为.py,不然无法解析执行,只能为.cgi

在/var/www/html/cgi-bin下创建脚本

报错:

访问页面:

You don‘t have permission to access /cgi-bin/ on this server.

查看日志:

cat /var/log/httpd/error_log

报错:Attempt to invoke directory as script

修改httpd.conf配置文件:

replace this:

ScriptAlias /cgi-bin /var/www/html/cgi-bin/  

with  :

Alias /cgi-bin/ "/var/www/html/cgi-bin/"

#

# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased

# CGI directory exists, if you have that configured.

#

<Directory "/var/www/html/cgi-bin/">

AllowOverride None

Options None FollowSymLinks +ExecCGI

Order allow,deny

Allow from all

</Directory>

AddHandler cgi-script .cgi .pl

DirectoryIndex index.html index.html.var index.php index.cgi    #这里不加index.cgi的话则默认的cgi-bin目录无法访问,但是下面的文件,指定的话还是可以访问的。

CGI编程,布布扣,bubuko.com

时间: 2024-10-10 07:28:43

CGI编程的相关文章

几种语言的CGI编程

为了了解PHP.JSP.ASP出现之前人们写网站的方法,洒家研究了一波CGI,使用C.Python.batch.shell script语言写了几个简单的网页. CGI即通用网关接口,指web服务器调用编程语言编写的程序的一个接口.洒家用的是Apache的CGI,QUERY_STRING.REMOTE_ADDR.REQUEST_URI等参数是通过环境变量传递给CGI程序的,请求主体(POST数据)作为CGI程序的标准输入(stdin),而CGI程序的标准输出(stdout)作为HTTP响应的部分

CGI编程学习

@CGI编程学习 目录(?)[+] 一.基本原理 CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口.通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端. 组成CGI通信系统的是两部分:一部分是html页面,就是在用户端浏览器上显示的页面.另一部分则是运行在服务器上的Cgi程序. 它们之间的通讯方式如下图: 服务器 客户端 CGI程序 HTTP通信 标准输入输出 (环境

python cgi 编程

python默认自带了几个和web相关的模块.原来只知道SimpleHTTPServer 这个模块,后来又知道了 CGIHTTPServer 这个模块 SimpleHTTPServer 1 python -m SimpleHTTPServer 80 在命令行里键入上面的命令就有了一个简单的HTTP服务器了,服务器的端口是 80 (也可以是别的,如果80端口被占用了) -m 的意思就是 module,web的根目录是命令行的当前目录  (win7 下 在一个文件夹空白的地方 shift+鼠标右键

Linux CGI编程基础【整理】

Linux CGI编程基础 1.为什么使用CGI? 如前面所见,任何的HTML均是静态网页,它无法实现一些复杂的功能,而CGI可以为我们实现.如:a.列出服务器上某个目录中的文件,对目录中的文件进行操作:b.通过CGI实现串口通讯:c.实现数据库接口:d.实现从摄像头读取一张图片显示在网页上… 等等 2. CGI是什么? CGI全称是 Common Gate Intergace ,在物理上,CGI是一段程序,它运行在Server上,提供同客户端 Html页面的接口. 3. CGI编程语言 你可以

Python CGI编程(转自易百)

Python CGI编程 Python的CGI编程,公共网关接口或CGI,Web服务器和一个自定义的脚本之间交换信息是一组定义的标准. 什么是CGI ? 公共网关接口或CGI,Web服务器和一个自定义的脚本之间交换信息是是一组定义的标准.. CGI规范在由NCSA和NCSA定义的CGI保持如下: 公共网关接口或CGI,如HTTP服务器信息服务器的标准接口是外部网关方案. 当前版本CGI/1.1和CGI/1.2. 网页浏览 理解CGI的概念,让我们看看会发生什么,当我们点击一个超链接到浏览特定网页

CGI编程学习----查询2000W开房数据

0x01:什么是CGI编程? CGI:Common Gateway Interface CGI代表Common Gateway Interface(通用网关界面),它使在网络服务器下运行外部分应用程序(或网关)成为可能. CGI-BIN 目录是存放CGI脚本的地方. 这些脚本使WWW服务器和浏览器能运行外部程序,而无需启动另一个原因程序. 它是运行在Web服务器上的一个程序,并由来自于浏览者的输人触发.CGI是在HTTP服务器下运行外部程序(或网关)的一个接口,它能让网络用户访问远程系统上的使用

Python CGI编程

cgi.FieldStorage() 访问作为web请求一部分发送给web服务器的数据,数据作为一个python字典. CGI是什么? 通用网关接口或CGI,是一组定义信息如何在Web服务器和自定义脚本之间交换的标准. CGI规范目前保持是由NCSA 和 NCSA 维护和定义如下. 通用网关接口或CGI,是外部网关方案,如HTTP服务器的信息服务器的接口标准. 目前的版本是CGI/1.1,而CGI/1.2目前正在定制中. 网页浏览 要了解CGI的概念,让我们看看当点击一个超链接,浏览某一个网页或

初试CGI编程--python篇

环境说明 system: Linux luogw-pc 3.5.0-48-generic #72~precise1-Ubuntu SMP Tue Mar 11 20:09:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux apache: (apt-get 安装方式) Server version: Apache/2.2.22 (Ubuntu) Server built:   Apr 17 2014 21:49:25 第一步:确认apache2服务器是否开启了C

Perl CGI编程

http://www.runoob.com/perl/perl-cgi-programming.html 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口. 网页浏览 为了更好的了解CGI是如何工作的,我们可以从在网页上点击一个链接或URL的流程: 1.使用你的浏览器访问URL并连接到HTTP web 服务器. 2.Web服务