开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

使用Python CGI实现服务器展现数据的API接口

简介:
+关注继续查看

001438516.gif

CGI脚本简单地讲是个运行在Web服务器上的程序, 有浏览器的输入触发. 这个脚本通常象服务器和系统中其他程序如数据库的桥梁。

CGI 脚本难道不是一个真正的脚本?按照你的服务器的支持, 他们可能是一个编译好的程序或者批命令文件或者其他可执行的东西. 为了简单起见,我们统称他们为脚本scripts.  


一个URL指向一个CGI脚本. 一个CGI脚本的URL能如普通的URL一样在任何地方出现。

服务器接收请求, 按照那个URL指向的脚本文件(注意文件的位置和扩展名),执行脚本.

脚本执行基于输入数据的操作,包括查询数据库、计算数值或调用系统中其他程序.

脚本产生某种Web服务器能理解的输出结果.

服务器接收来自脚本的输出并且把它传回浏览器,让用户了解结果。


我们具体能用CGI做些什么:  我在这里举个例子吧


1
2
3
1   比如我们服务端想获取客户端的一些个性能参数
2   可以在页面操作管理linux主机
3   我们可以用他来做后端,处理数据,并return回去


cgi相当的全,可以抓取http的数据,比如用户的ip地址,用户的请求的模式,数据包的大小等等~


步骤:


1
2
3
4
5
6
7
8
9
10
打开apache配置文件http.conf,进行如下修改:
1)LoadModule python_module modules/mod_python.so
2
<Directory "/var/www/cgi-bin">
            Options +ExecCGI +FollowSymLinks
            AllowOverride All
            Order allow,deny
            Allow from all
</Directory>
(3)   增加 AddHandler cgi-script .py .sh


我们能马上就实现的~


这个是把shell脚本当成CGI


000825308.jpg


这个是以python的方式运行这个CGI


000916688.jpg

这个是GET数据

001309712.jpg



sh做CGI的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
echo -e "Content-type: text/html;charset=utf-8\n\n"
echo CGI/1.0 test script report:$(uuidgen)'<br>'
echo argc is $#. argv is "$*".'<br>'
echo SERVER_SOFTWARE = $SERVER_SOFTWARE '<br>'
echo SERVER_NAME = $SERVER_NAME '<br>'
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE '<br>'
echo SERVER_PROTOCOL = $SERVER_PROTOCOL '<br>'
echo SERVER_PORT = $SERVER_PORT '<br>'
echo REQUEST_METHOD = $REQUEST_METHOD '<br>'
echo HTTP_ACCEPT = "$HTTP_ACCEPT" '<br>'
echo PATH_INFO = "$PATH_INFO" '<br>'
echo PATH_TRANSLATED = "$PATH_TRANSLATED" '<br>'
echo SCRIPT_NAME = "$SCRIPT_NAME" '<br>'
echo QUERY_STRING = "$QUERY_STRING" '<br>'
echo REMOTE_HOST = $REMOTE_HOST '<br>'
echo REMOTE_ADDR = $REMOTE_ADDR '<br>'
echo REMOTE_USER = $REMOTE_USER '<br>'
echo AUTH_TYPE = $AUTH_TYPE '<br>'
echo CONTENT_TYPE = $CONTENT_TYPE '<br>'
echo CONTENT_LENGTH = $CONTENT_LENGTH
echo '11111111111111'
echo $(dir)
echo $(ifconfig)




python做CGI的脚本!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
print "Content-type: text/html;charset=utf-8\n\n"
print "<center>hello world</center>"
print "<pre>"
a=os.popen('free').read()
print a
print "</pre>"
print "<pre>"
a=os.popen('uptime').read()
print a
print "</pre>"
print "<pre>"
a=os.popen('df -HT').read()
print a
print "</pre>"
print "<pre>"
a=os.popen('netstat -an|grep ES').read()
print a
print "</pre>"


get的方式传递参数


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python
# Import modules for CGI handling
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"




可以用 /cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI  进行测试~

简单写个HTML页面 ,action指向到CGI的地址上


1
2
3
4
5
<formaction="/cgi-bin/hello_get.py"method="get">
First Name: <inputtype="text"name="first_name"><br/>
Last Name: <inputtype="text"name="last_name"/>
<inputtype="submit"value="Submit"/>
</form>



我们在来实现文件的上传~

这个一个简单的页面~


1
2
3
4
5
6
7
8
9
<html>
<body>
<formenctype="multipart/form-data"
action="save_file.py"method="post">
<p>File: <inputtype="file"name="filename"/></p>
<p><inputtype="submit"value="Upload"/></p>
</form>
</body>
</html>


后端是~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/python
import cgi, os
import cgitb; cgitb.enable()
form = cgi.FieldStorage()
# Get filename here.
fileitem = form['filename']
# Test if the file was uploaded
if fileitem.filename:
   # strip leading path from file name to avoid
   # directory traversal attacks
fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())
message = 'The file "' + fn + '" was uploaded successfully'
else:
message = 'No file was uploaded'
print """\
Content-Type: text/html\n
<html>
<body>
<p>%s</p>
</body>
</html>
""" % (message,)


用cgi实现url的redirect跳转 !

1
2
3
4
5
6
#!/usr/bin/env python
import cgi
url = "http://example.com/"
print "Status: 302 Moved"
print "Location: %s" % url
print

cgi和apache,nginx等web服务器一块用,很爽的~



 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1196090,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
接口自动化框架(Python)之 四,读取exlce表格
接口自动化框架(Python)之 四,读取exlce表格
0 0
接口自动化框架(Python)之 三,base.py的配置
接口自动化框架(Python)之 三,base.py的配置
0 0
接口自动化框架(Python)之 二,http_service的配置
接口自动化框架(Python)之 二,http_service的配置
0 0
接口自动化框架(Python)之 一,如何规划自动化框架
接口自动化框架(Python)之 一,如何规划自动化框架
0 0
Python vim模块的函数接口
Python vim模块的函数接口
0 0
python使用pytest接口自动化测试的使用
python使用pytest接口自动化测试的使用
0 0
OCR接口全文识别高精版本地图片以及URL调用Python示例
官方完整项目似乎缺少了alibabacloud_darabonba_stream,直接导入项目,这边提示缺少依赖,后来手动导入后成功了
0 0
Python编程:通过百度地图接口抓取机构的地址和电话信息
Python编程:通过百度地图接口抓取机构的地址和电话信息
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
数据资源的基础设施API总线
立即下载
Python第五讲——关于爬虫如何做js逆向的思路
立即下载
API 网关实践
立即下载