Python-创建一个网络(HTTP)服务器

269 阅读2分钟

通过标准库的http 模块,Python 使得创建一个 HTTP 服务器变得非常容易。

特别是,http.server 对象是我们要使用的东西。

首先,我想提一个快速的方法,从任何文件夹中运行一个 HTTP 服务器,而不用写任何代码。

python -m http.server --cgi 8000

这将在8000端口运行一个HTTP服务器,为当前文件夹中的文件提供服务。当然,这不是一个像Nginx或Apache那样功能齐全的HTTP服务器,但对于原型或你自己的测试项目来说,这通常是足够好的。

现在让我们在代码中使用该模块,使其以编程方式向连接到8000 端口的任何人提供一个 "Hello, World!"字符串。

from http.server import BaseHTTPRequestHandler, HTTPServer

class handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()

        message = "Hello, World!"
        self.wfile.write(bytes(message, "utf8"))

with HTTPServer(('', 8000), handler) as server:
    server.serve_forever()

在本地运行这个程序后,你可以试着用网络浏览器连接到端口http://localhost:8000。

这样,在对任何URL的GET请求中,都会向在http://localhost:8000 上访问网站的任何人提供相同的Hello, World! 字符串,并有一个200响应和一个Content-type: text/html 标头。

我们写到wfile ,它包含了将响应写回给客户端的输出流。

它在GET请求上工作,因为我们实现了处理程序do_GET 方法。

你也可以实现do_HEAD(),do_POST() 和其他任何 HTTP 方法。

from http.server import BaseHTTPRequestHandler, HTTPServer

class handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()

        message = "Hello, World! Here is a GET response"
        self.wfile.write(bytes(message, "utf8"))
    def do_POST(self):
        self.send_response(200)
        self.send_header('Content-type','text/html')
        self.end_headers()

        message = "Hello, World! Here is a POST response"
        self.wfile.write(bytes(message, "utf8"))

with HTTPServer(('', 8000), handler) as server:
    server.serve_forever()

Python 有很多不同的库,我们可以用来处理建立在 Web 服务器之上的应用程序,包括非常流行的 Flask 和 Django。