首页 > 其他 > 详细

wsgi知识点

时间:2021-05-22 23:09:21      阅读:36      评论:0      收藏:0      [点我收藏+]

 

 

1. http请求的原理

http请求原理其实就是socket连接,服务器发送完成消息后,关闭socket连接

 

技术分享图片

 

 

 

# encoding:utf-8
# @Time : 2021/5/22 7:18 下午
# @Author : yan
# @Content: python web框架的版本一, 展示请求静态页面的过程
import socket
import re
from multiprocessing import Process

def service_client(new_socket):
    """处理浏览器的请求"""
    # 1. 接收浏览器发送来的数据,解析请求报文的请求行
    # GET /index.html HTTP/1.1
    request = new_socket.recv(1024).decode("utf-8")
    # [
    # ‘GET /version1 HTTP/1.1‘,   # 请求行,解析请求行,找到静态资源
    # ‘Host: 127.0.0.1:8888‘,     # 请求头,解析请求头,获取session等信息
    # ‘Connection: keep-alive‘,
    # ‘Cache-Control: max-age=0‘,
    # ‘sec-ch-ua: " Not A;Brand";v="99",
    # "Chromium";v="90",
    # "Google Chrome";v="90"‘, ‘
    # sec-ch-ua-mobile: ?0‘,
    # ‘Upgrade-Insecure-Requests: 1‘,
    # ‘User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36‘,
    # ‘Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9‘,
    # ‘Sec-Fetch-Site: none‘, ‘Sec-Fetch-Mode: navigate‘, ‘Sec-Fetch-User: ?1‘,
    # ‘Sec-Fetch-Dest: document‘, ‘Accept-Encoding: gzip, deflate, br‘,
    # ‘Accept-Language: zh-CN,zh;q=0.9‘,
    # ‘Cookie: csrftoken=yuqdKIvcb4n1XDwwM8APng4df84hlLQ1sZead7YBshaS1fITeUI6awsUTEWD1q9L‘,
    # ‘‘ # 请求体,解析请求体,获得参数
    # ]
    request_lines = request.splitlines()
    print(request_lines)
    file_name = ""
    # 非斜杠,非空格 [取非操作]
    rule = r"[^/]+(/[^ ]*)"
    ret = re.match(rule, request_lines[0])
    print(ret)
    if ret:
        file_name = ret.group(1)
        if file_name == "/version1":
            file_name = "/version1.html"
    try:
        # 打开对应路径下的html静态页面
        f = open("../html" + file_name, "rb")
    except:
        # 构造失败标准格式
        response = "HTTP/1.1 404 NOT FOUND\r\n"
        response += "\r\n"
        response += "----file not found ----"
        new_socket.send(response.encode("utf-8"))
    else:
        # 构造成功的标准格式
        html_content = f.read()
        f.close()
        response = "HTTP/1.1 200 \r\n"
        response += "\r\n"
        # 为什么响应要分为两次发送呢?# TODO 这里必须发送两次
        # 先发一个响应行过去,再把响应体发过去,
        # 这种形式是没有响应头的信息,如何添加响应头信息
        new_socket.send(response.encode("utf-8"))
        new_socket.send(html_content)

    new_socket.close()


def main():
    # 1. 创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    # 2. 绑定套接字
    tcp_server_socket.bind(("", 8888))
    tcp_server_socket.listen(128)
    try:
        while True:
            new_socket, client_addr = tcp_server_socket.accept()
            p = Process(target=service_client, args=(new_socket,))
            p.start()
            new_socket.close()
    except:
        tcp_server_socket.close()


if __name__ == __main__:
    main()

 

 

 

 

 

 

 

 

 

# TODO

wsgi知识点

原文:https://www.cnblogs.com/meloncodezhang/p/14799831.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!