本文讲述如何用python3.6.9创建基础的 HTTP SERVER,将Python版本写出是为了更准确描述。
(1) 命令行
假设我的HTML页面在/home/httpd下
cd /home/httpd
python3 -m http.server 8000 //8000是默认端口,可以修改为80
网站默认的主文件是 index.htm/inex.html,内容如下
<html>
<head>
<title>techlife.com.cn</title>
</head>
<body>
Techlife 开源/开放
</body>
</html>
用如下命令测试
python3 -m http.server 80
服务器提示
Serving HTTP on 0.0.0.0 port 80 (https://0.0.0.0:80/) …
用浏览器访问服务器IP,会发现是乱码,为了避免中文编码的问题,需要修改index.html,在 html 和 head 标签中间增加如下一行
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
继续访问,中文正常显示,简单的HTTP服务搭建成功。
有几个有用的命令,在这里一并给出
python3 -m http.server 80 --bind 127.0.0.1 //绑定IP地址,多用于一个服务器上有多个IP的情景
python3 -m http.server --directory /tmp/ //绑定目录,默认端口8000
如果想让页面支持程序交互(CGI),用命令行启动应如下编写
python3 -m http.server 80 --cgi
下面用一个不含参数的提交页面来举例说明
首先构建一个test.html,内容如下
<HTML>
<BODY>
<FORM ACTION = "/cgi-bin/test.py">
<INPUT TYPE = submit>
</FORM>
</BODY>
</HTML>
cgi-bin目录中的test.py,内容如下
#!/usr/bin/python3
import cgi
print('Content-Type:text/html\n\n')
print('hello cgi')
用不带CGI命令参数启动测试,点击提交按钮后,页面直接显示出test.py的内容,也就是说无法解析CGI,如下图
用带CGI命令参数启动测试,点击提交按钮后,页面直接显示test.py执行的结果,也就是说成功解析了cgi,如下图
(2)用Python程序编写简单的 HTTP 服务端
用python程序编写避免了使用命令时,执行窗口一旦关闭,HTTP 服务也随之关闭的问题
先构建一个简单的 Server.py 程序,这个是无法解析CGI的
#!/usr/bin/python3
#--coding:utf-8--
import http.server
import socketserver
PORT = 80
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
可以解析CGI的程序如下,我给它起名叫 run_server.py
#!/usr/bin/python3
#--coding:utf-8--
from http.server import HTTPServer, CGIHTTPRequestHandler
port = 80
httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
print("Starting simple_httpd on port: " + str(httpd.server_port))
httpd.serve_forever()
如何让它们在SHELL窗口关闭以后还能继续运行呢,我在/etc/rc.local里加了如下一句话
nohup python3 -u /home/html/run_server.py params1 > nohup.out 2>&1 &
也可以直接在SHELL里执行,然后把窗口关闭,刷新页面试试。
至此,此篇结尾,以上这些例子,大家可以测试,多测试多掌握,有问题一起沟通。