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



相关文章
|
7天前
|
移动开发 JavaScript 前端开发
精通服务器推送事件(SSE)与 Python 和 Go 实现实时数据流 🚀
服务器推送事件(SSE)是HTML5规范的一部分,允许服务器通过HTTP向客户端实时推送更新。相比WebSocket,SSE更轻量、简单,适合单向通信场景,如实时股票更新或聊天消息。它基于HTTP协议,使用`EventSource` API实现客户端监听,支持自动重连和事件追踪。虽然存在单向通信与连接数限制,但其高效性使其成为许多轻量级实时应用的理想选择。文中提供了Python和Go语言的服务器实现示例,以及HTML/JavaScript的客户端代码,帮助开发者快速集成SSE功能,提升用户体验。
|
8天前
|
存储 供应链 监控
1688商品数据实战:API搜索接口开发与供应链分析应用
本文详细介绍了如何通过1688开放API实现商品数据的获取与应用,涵盖接入准备、签名流程、数据解析存储及商业化场景。开发者可完成智能选品、价格监控和供应商评级等功能,同时提供代码示例与问题解决方案,确保法律合规与数据安全。适合企业开发者快速构建供应链管理系统。
|
4天前
|
人工智能 自然语言处理 关系型数据库
不写一行代码,用MCP+魔搭API-Inference 搭建一个本地数据助手! 附所有工具和清单
还在为大模型开发的复杂技术栈、框架不兼容和工具调用问题头疼吗?MCP(Model Context Protocol servers)来拯救你了!它用统一的技术栈、兼容主流框架和简化工具调用的方式,让大模型开发变得简单高效。
103 1
|
14天前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
2天前
|
数据采集 数据挖掘 API
深挖京东商品详情 API:一键获取全维度商品数据
京东商品详情API是京东开放平台为开发者提供的关键接口,支持通过编程方式获取商品详细信息,包括基本信息、描述、规格和用户评价等。该API数据全面、实时性强、稳定性高且灵活可定制,满足多场景需求。示例代码展示了如何用Python调用此API,帮助开发者快速集成京东商品数据到自身系统中,实现高效的商品数据分析与应用开发。体验链接:c0b.cc/R4rbK2 。
|
4天前
|
存储 JSON API
淘宝商品详情API接口概述与JSON数据示例
淘宝商品详情API是淘宝开放平台提供的核心接口之一,为开发者提供了获取商品深度信息的能力。以下是技术细节和示例:
|
14天前
|
缓存 监控 搜索推荐
【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
本文介绍小红书官方API——`smallredbook.item_get_video`的功能与使用方法。该接口可获取笔记视频详情,包括无水印直链、封面图、时长、文本描述、标签及互动数据等,并支持电商场景分析。调用需提供`key`、`secret`和`num_iid`参数,返回字段涵盖视频链接、标题、标签及用户信息等。同时,文章提供了电商实战技巧,如竞品监控与个性化推荐,并列出合规注意事项及替代方案对比。最后解答了常见问题,如笔记ID获取与视频链接时效性等。
|
15天前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
|
10月前
|
开发框架 JSON .NET
初学者不会写接口怎么办?微软Visual Studio 2022无脑式API接口创建——Swagger一键导入APIKit快速测试
初学者不会写接口怎么办?微软Visual Studio 2022无脑式API接口创建——Swagger一键导入APIKit快速测试
484 0