实现httpSever升级路由

0x01接收路径

函数式的路径判断
截取请求路径的扩展功能

0x02 代码

"""
使用socket 搭建一个简单的web服务端
函数进阶版
"""
import time
import socket
sk = socket.socket()
sk.bind(('127.0.0.1', 8080))
sk.listen()

def yingying(url):
    data = 'ni fang wen de shi: {}'.format(url)
    return bytes(data, encoding='utf8')

def hpg(url):
    data = 'a huang de computer is bei tou le !'
    return bytes(data, encoding='utf8')

def login(url):
    # 返回一个字节类型HTML文件的内容
    with open('login.html', 'r', encoding='utf8') as f:
        data = f.read()
    now = str(time.time())
    data = data.replace('@@xx@@', now)
    return bytes(data, encoding='utf8')

# url和函数的对应关系
url_func = [
    ('/yingying/', yingying),
    ('/hpg/', hpg),
    ('/login/', login),
]

while 1:
    # ------------------- a。建立连接 接收消息部分 --------------------
    conn, addr = sk.accept()
    data = conn.recv(9000)

    # -------------------- b. 对用户发来的消息做处理的部分 -------------
    # 把收到的字节类型的数据转换成字符串
    data_str = str(data, encoding='utf8')
    # 按照课前练习切分字符串,得到请求行
    first_line = data_str.split('\r\n')[0]
    # 对请求行按照空格切割
    url = first_line.split(' ')[1]

    # --------------- c. 业务逻辑处理部分 ---------------------
    # 使用func变量保存将要执行的函数
    for i in url_func:
        if i[0] == url:
            func = i[1]
            break
    else:
        func = None
    # 执行函数
    if func:
        msg = func(url)
    else:
        msg = b'404 not found!'

    # ----------------- d. 回复响应消息 部分 ----------------------
    conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
    conn.send(msg)
    conn.close()

0x03 备注说明

功能单一,可以继续扩展,参数判断, 案例可以以登录为例, 再加上数据库连接和查询的扩展

原文链接: 实现httpSever升级路由 版权所有,转载时请注明出处,违者必究。
注明出处格式:流沙团 ( https://www.gyarmy.com/post-645.html )

发表评论

0则评论给“实现httpSever升级路由”