使用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,如需转载请自行联系原作者



相关文章
|
5天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
26天前
|
数据采集 JSON API
如何实现高效率超简洁的实时数据采集?——Python实战电商数据采集API接口
你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。让我为大家介绍一款强大的数据采集API接口。
|
29天前
|
JSON API 数据库
解释如何在 Python 中实现 Web 服务(RESTful API)。
解释如何在 Python 中实现 Web 服务(RESTful API)。
22 0
|
1月前
|
缓存 API 定位技术
使用Python调用百度地图API实现地址查询
使用Python调用百度地图API实现地址查询
87 0
|
19天前
|
弹性计算 网络安全 虚拟化
ECS数据问题之升级配置预防数据丢失如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
22天前
|
供应链 搜索推荐 BI
深入了解淘宝原数据:获取API接口及其使用场景
在当今数字化的时代,对于电商行业来说,数据具有极大的价值。淘宝作为中国最大的综合电商平台,拥有庞大的商品信息和用户数据。对于开发者和企业来说,淘宝原数据的获取和分析是实现个性化服务和精准营销的基础。本文将介绍如何通过API接口获取淘宝原数据,以及数据的使用场景。
|
22天前
|
安全 数据处理 C#
C# Post数据或文件到指定的服务器进行接收
C# Post数据或文件到指定的服务器进行接收
|
25天前
|
Linux Docker Python
如何将本地的python项目部署到linux服务器中
如何将本地的python项目部署到linux服务器中
69 1
|
29天前
|
JSON API 数据格式
Python中使用API(四)
Python中使用API(四)
18 0
|
29天前
|
JSON API 数据格式
Python中使用API(三)
Python中使用API(三)
18 0