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



相关文章
|
10月前
|
JSON 缓存 算法
如何通过API获取1688商品类目数据:技术实现指南
1688开放平台提供alibaba.category.get接口,支持获取全量商品类目树。RESTful架构,返回JSON数据,含类目ID、名称、层级等信息。需注册账号、创建应用并授权。请求需签名认证,QPS限10次,建议缓存更新周期≥24小时。
|
10月前
|
JSON 安全 API
亚马逊商品列表API秘籍!轻松获取商品列表数据
亚马逊商品列表API(SP-API)提供标准化接口,支持通过关键词、分类、价格等条件搜索商品,获取ASIN、价格、销量等信息。采用OAuth 2.0认证与AWS签名,保障安全。数据以JSON格式传输,便于开发者批量获取与分析。
|
10月前
|
JSON 监控 API
小红书笔记评论API:一键获取分层评论与用户互动数据
小红书笔记评论API可获取指定笔记的评论详情,包括内容、点赞数、评论者信息等,支持分页与身份认证,返回JSON格式数据,适用于舆情监控、用户行为分析等场景。
1387 1
|
10月前
|
JSON API 数据格式
淘宝拍立淘按图搜索API系列,json数据返回
淘宝拍立淘按图搜索API系列通过图像识别技术实现商品搜索功能,调用后返回的JSON数据包含商品标题、图片链接、价格、销量、相似度评分等核心字段,支持分页和详细商品信息展示。以下是该API接口返回的JSON数据示例及详细解析:
|
10月前
|
自然语言处理 监控 API
速卖通商品详情API秘籍!轻松获取SKU属性数据
速卖通商品详情API(aliexpress.item.get)支持通过编程获取商品标题、价格、SKU、库存、销量、物流模板、评价及店铺信息,适用于价格监控、选品分析等场景。接口支持多语言返回,采用AppKey+AppSecret+Token认证,需签名验证,确保安全调用。
|
10月前
|
XML JSON API
苏宁商品详情API秘籍!轻松获取商品详情数据
苏宁商品详情API基于RESTful架构,支持JSON/XML格式,通过AppKey、AppSecret与签名三重认证,结合OAuth 2.0实现安全调用。开发者可获取商品名称、价格、销量、库存、促销等实时数据,适用于电商分析与商业智能。接口强制使用HTTPS协议,支持POST/GET请求,统一采用UTF-8编码,确保数据传输安全可靠。
|
10月前
|
安全 API
亚马逊商品详情 API 秘籍!轻松获取 SKU 属性数据
亚马逊商品详情API是官方接口,通过ASIN获取商品标题、价格、库存、评价等50余项数据,支持多站点查询。包含Product Advertising API与MWS两类,分别用于商品信息获取和卖家店铺管理,采用AWS4-HMAC-SHA256认证,保障请求安全。
|
11月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1685 102
|
11月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
515 104
|
11月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
404 103

推荐镜像

更多