您的位置:首页 > 其它

web服务器02-返回用户指定页面

2018-01-07 23:16 218 查看
import socket
import re

# 创建处理客户端函数

def request_handler(cliect_socket):

    # 接收用户请求

    recv_data = client_socket.recv(4096)

    if not recv_data:

        print("客户端断开连接")

        client_socket.close()
        return  如果客户端已经断开连接 则不需要再执行后续代码 直接结束函数即可

    # 解码数据 请求报文数据

    recv_str_data = recv_data.decode()

    # 利用正则表达式截取  用户路径 #GET /index2.html HTTP/1.1\r\n

    ret = re.match(r"[^/]+([^ ]+)", recv_str_data)   #利用正则提取/xxx.html
    path_info = ret.group(1)

    try: # 尝试打开用户需要的文件, 不存在则抛出异常

        with open("./static" + path_info, "rb") as file:# with 语句 自动将对象的资源惊醒释放--> 上下文管理
            file_deta = file.read() #

    except Exception as e:    #如果在try部份引发了名为'name'的异常,则执行这段代码

       
# 响应行  响应头   响应体         版本号  状态码    

        response_line = "HTTP/1.1 404 OK\r\n"

        response_header = "Server: PythonServer1.0\r\n"

        response_body = "ERROR"

        # 响应报文数据的拼接

        response_data = response_line + response_header + "\r\n" + response_body
        client_socket.send(response_data.encode())

    else:#如果没有异常发生,则执行这段代码

        response_line = "HTTP/1.1 200 OK\r\n"

        response_header = "Server: PythonServer1.0\r\n"

        response_body = file_deta

        response_deta = (response_line +response_header + "\r\n").encode() + response_body
        client_socket.send(response_deta)
#发送响应报文

      finally:       #关闭

        client_socket.close()

if __name__ == '__main__':

    # 创建服务器套接字

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 地址重用    (1设置, 0取消)

    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    # 绑定端口

    server_socket.bind(("", 8888))

    # 监听
    server_socket.listen(128)

    # 服务器从客户端接受一个

    while True:

        client_socket, client_address = server_socket.accept()

        # 打印一下接收ip

        print("服务器接收到%s的链接" % str(client_address))
        request_handler(client_socket)



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐