编程菜鸟到大佬之路:实战项目之 python web 服务器(二)

python3 实现简单的 web 服务器

第二部分内容


开发准备

  1. 打开终端,进入 /home/shiyanlou/Code 目录,创建 web-server 文件夹,并将其作为工作目录。

    $ cd /home/shiyanlou/Code
    $ mkdir web-server && cd web-server
    
  2. 使用 httpie 代替浏览器发送请求并在终端打印响应信息。

    $ sudo apt-get update
    $ sudo apt-get install httpie
    

开发步骤

第一步:你好, web

  1. 等待某个人连接我们的服务器并向我们发送一个 HTTP 请求;
  2. 解析该请求;
  3. 了解该请求希望请求的内容;
  4. 服务器根据请求抓取需要的数据(从服务器本地文件中读取或者程序动态生成);
  5. 将数据格式化为请求需要的格式;
  6. 返回HTTP响应。
  • 步骤1、2、6的操作对所有 web 应用都是一样的,这部分内容 Python 标准库中的BaseHTTPServer 模块可以帮助我们处理。我们只需要关注步骤3~5。

  • 首先在 /home/shiyanlou/Code/web-server 目录下创建 server.py 文件:

    #-*- coding:utf-8 -*-
    from http.server import BaseHTTPRequestHandler, HTTPServer
    
    class RequestHandler(BaseHTTPRequestHandler):
        '''处理请求并返回页面'''
    
        # 页面模板
        Page = '''\
            <html>
            <body>
            <p>Hello, web!</p>
            </body>
            </html>
        '''
    
        # 处理一个GET请求
        def do_GET(self):
            self.send_response(200)
            self.send_header("Content-Type", "text/html")
            self.send_header("Content-Length", str(len(self.Page)))
            self.end_headers()
            self.wfile.write(self.Page.encode('utf-8'))
    
    if __name__ == '__main__':
        serverAddress = ('', 8080)
        server = HTTPServer(serverAddress, RequestHandler)
        server.serve_forever()
    
    • 模块的 BaseHTTPRequestHandler 类会帮我们处理对请求的解析,并通过确定请求的方法来调用其对应的函数,比如方法是 GET,该类就会调用名为 do_GET 的方法。
    • RequestHandler 继承了 BaseHTTPRequestHandler 并重写了 do_GET 方法,其效果如代码所示是返回 Page 的内容。
    • Content-Type 告诉了客户端要以处理 html 文件的方式处理返回的内容。
    • end_headers 方法会插入一个空白行,如之前的 request 结构图所示。
  • 运行我们的第一个 web 服务器:
    在这里插入图片描述

  • 可以在浏览器地址输入127.0.0.1:8080进行查看:
    在这里插入图片描述

  • 在web服务器开启的情况下,我们重新开一个终端窗口,使用 httpie 来查看输出(之后都使用 httpie 来查看输出),httpie 会显示响应报文的全部内容:
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/87020100