编写简单cgi web服务器

创建简单cgi web服务的方法有两种,一种是命令行方式,还有一种通过运行python文件方式:

  1. 可以通过执行python3 -m http.server --cgi 8000命令创建一个8000端口的简单web服务。
  2. 也可以通过文件创建一个cgi服务器,名为http_server.py:
from http.server import HTTPServer, CGIHTTPRequestHandler

PORT = 8000

with HTTPServer(("", PORT), CGIHTTPRequestHandler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

执行python3 http_server.py命令,运行这个web服务器:

# python3 http_server.py 
serving at port 8000

提示运行在8000端口上,服务即可运行。

编写cgi脚本

在当前运行web服务的cgi-bin/里,创建一个date.py文件,内容如下:

#!/usr/bin/env python3
import os
result = os.popen("date").read()

content = f"""
<html>
  <body>
  {result}
  </body>
</html>
"""

print(content)

给这个文件增加x执行权限

chmod +x date.py

浏览器访问

通过浏览器或curl命令,打开http://:8000/cgi-bin/date.py,即可看到命令的运行结果,运行多次看到多次不同的运行结果。

# curl http://192.168.50:8000/cgi-bin/date.py
<html>
  <body>
  Fri  9 Dec 17:50:37 CST 2022

  </body>
</html>

# curl http://192.168.50:8000/cgi-bin/date.py
<html>
  <body>
  Fri  9 Dec 17:50:42 CST 2022

  </body>
</html>


内容输出正常。


其他

如果只需要创建一个简单的http服务:

  1. 可以执行python3 -m http.server 8000启动
  2. 也可以可以这样启动:
from http.server import HTTPServer, SimpleHTTPRequestHandler

PORT = 8000

with HTTPServer(("", PORT), SimpleHTTPRequestHandler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

简单http服务,会完全把文件内容输出,不会运行文件。也可以用来创建个临时的web文件下载服务器。