028-86261949

当前位置:首页 > 技术交流 > Python实现静态web服务器

Python实现静态web服务器

2019/01/02 14:22 分类: 技术交流 浏览:52

一、什么是Web服务器

Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache Nginx IIS。今天我们用Python来实现一个简单的静态Web服务器。

二、代码实现

from socket import *

from multiprocessing import Process

# 声明一个WebServe的类

class WebServer(object):

    """构造方法"""

    def __init__(self, port=8000, max_listen=128):

        # 1. 创建套接字

        self.tcp_server = socket(AF_INET, SOCK_STREAM)

        # 2. 绑定IP和端口

        self.tcp_server.bind(("", port))

        # 3. 把主动变成被动

        self.tcp_server.listen(max_listen)

    def request(self, new_socket):

        # 5.接收数据

        request_data = new_socket.recv(1024)

        # 5.1 判断有没有数据

        if not request_data:

            new_socket.close()

            return

        print(request_data)

        # 6.打印

        # 6.1 先把得到数据按行分割成列表

        request_lines = request_data.splitlines()

        # 6.2 请求行  GET /1.html HTTP/1.1

        request_start_line = request_lines[0].decode("utf-8")

        # 6.3 取文件名

        file_name = request_start_line.split(" ")[1]

        # 6.3.1 判断文件名是不是 /

        if file_name == "/":

            file_name = "/index.html"

        # 6.4 拼接上网站根目录常量

        file_name = WEB_ROOT + file_name

        print(file_name)

        try:

            # 6.5 打开文件

            with open(file_name, "rb") as f:

                # 文件内空

                html = f.read()

        except:

            # 7. 返回

            # 响应行

            response_start_line = b"HTTP/1.1 404 Not found\r\n"

            # 响应头

            response_headers = b"Content-Type: text/html;charset=UTF-8\r\n"

            response_headers += b"Server: YMSD\r\n\r\n"

            # 响应体

            response_body = "<b>当前网页找不到</b>".encode("utf-8")

            #

            response_data = response_start_line + response_headers + response_body

            new_socket.send(response_data)

        else:

            # 7. 返回

            # 响应行

            response_start_line = b"HTTP/1.1 200 OK\r\n"

            # 响应头

            response_headers = b"Server: YMSD\r\n\r\n"

            # 响应体

            response_body = html

            #

            response_data = response_start_line + response_headers + response_body

            new_socket.send(response_data)

        # 关闭套接字

        new_socket.close()

    def start(self):

        while True:

            # 4.等待连接,并创建新的逃接字

            new_socket, client_info = self.tcp_server.accept()

            # 创建一个进程

            p = Process(target=self.request, args=(new_socket,))

            # 启动进程

            p.start()

            # request(new_socket)

            # TODO:sad

            # 多进程必需关闭new_socket

            new_socket.close()

# 声明一个常量用来放网站的根目录

WEB_ROOT = "html"

def main():

    # 创建Web对象

    web = WebServer(8080)

    # 调用对象start方法

    web.start()

if __name__ == '__main__':

    main()

#标签:python,静态web服务器,Python学习,