Python学习----静态web服务器-创新互联

开发静态web服务器

开发步骤:
1、编写一个TCP服务端程序
2、获取浏览器发送的HTTP请求报文数据
3、读取固定页面数据,把页面数据组装HTTP响应报文数据发送给浏览器
4、HTTP响应报文数据发送完成之后,关闭服务于客户端的套接字

成都创新互联公司是一家集网站建设,北屯企业网站建设,北屯品牌网站建设,网站定制,北屯网站建设报价,网络营销,网络优化,北屯网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
import socket

if __name__ == '__main__':
    # 1、编写一个TCP服务端程序
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server_socket.bind(("", 8080))
    tcp_server_socket.listen(128)

    while True:
        # 2、获取浏览器发送的HTTP请求报文
        client_socket, client_addr = tcp_server_socket.accept()
        client_request_data = client_socket.recv(1024).decode()
        print(client_request_data)

        # 3、读取固定页面数据,把页面数据组装称HTTP响应报文数据发送给浏览器
        # rb r 读取数据,b读取二进制的方式读取文件
        with open("./index.html", "rb") as f:
            file_data = f.read()
        # 组装http响应报文
        response_line = "HTTP/1.1 200 OK \n"
        response_header = "Server:pwb\n"
        response_body = file_data
        response_data = (response_line + response_header + "\n").encode() + response_body
        client_socket.send(response_data)
        client_socket.close()

和之前服务端编写差不多,差别在于,首先客户端不需要我们编写了,是通过浏览器发送请求。
然后,因为浏览器遵循的是http请求,所以我们在用socket进行返回时,需要遵循http响应的格式,将数据进行返回。
目前为止,还没有学习框架,不能像java的spring那样。

目前端口是写死在程序中,如果我们在Linux服务器中启动服务起,通过命令行的方式指定端口:
1、导入模块
import sys
2、获取命令终端输入的数据
sys.argv

在这里插入图片描述
这样就可以读取命令行传入的参数,通过指定端口进行启动。

最终版,通过命令行方式启动

import socket
import sys
import threading


class HttpWebServer:
    def __init__(self, port):
        self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.tcp_server_socket.bind(("", port))
        self.tcp_server_socket.listen(128)

    def handle_client_request(self, client_socket):
        client_request_data = client_socket.recv(1024).decode()
        print(client_request_data)
        request_data = client_request_data.split(" ")
        print(request_data)
        if len(request_data) == 1:
            client_socket.close()
            return
        request_path = request_data[1]
        if request_path == "/":
            request_path = "/index.html"
        try:
            with open("./static" + request_path, "rb") as f:
                file_data = f.read()
        except Exception as e:
            response_line = "HTTP/1.1 404 Not Found \n"
            response_header = "Server:pwb\n"
            response_body = "404 Not Found sorry"
            response_data = (response_line + response_header + "\n").encode() + response_body.encode()
            client_socket.send(response_data)
        else:
            response_line = "HTTP/1.1 200 OK \n"
            response_header = "Server:pwb\n"
            response_body = file_data
            response_data = (response_line + response_header + "\n").encode() + response_body
            client_socket.send(response_data)
        finally:
            client_socket.close()

    def start(self):
        while True:
            client_socket, client_addr = self.tcp_server_socket.accept()
            print("客户端地址:", client_addr)
            sub_thread = threading.Thread(target=self.handle_client_request, args=(client_socket,))
            sub_thread.start()


def main():
    if len(sys.argv) != 2:
        print("格式错误 python xxx.py 9090")
        return
    if not sys.argv[1].isdigit():
        print("格式错误 python xxx.py 9090")
        return
    port = int(sys.argv[1])
    my_web_server = HttpWebServer(port)
    my_web_server.start()


if __name__ == '__main__':
    main()

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站名称:Python学习----静态web服务器-创新互联
文章位置:http://myzitong.com/article/dcppig.html