思路:
1. 解析HTTP请求的头部
HTTP请求头部的结束符行为"\r\n",可以按行读取HTTP请求头的内容,如果读到一行为"\r\n",说明HTTP请求头结束。
2. 请求头里面含有Content-Length参数
如果HTTP请求里面有Content-Length参数,说明HTTP请求的内容大小是确定的,请求直接读取Content-Length的值,然后读取相应字节的的内容即可。
3.请求头里面含有Transfer-Encoding: chunked 参数
如果HTTP请求里面有Transfer-Encoding参数,说明HTTP请求的内容大小是不确定的,这种内容的结束符是"0\r\n\r\n",因此可以按行读取HTTP请求的内容部分,如果连续读到"0\r\n"和"\r\n"说明内容读取完毕。
代码实现:
代码中: self._file 代表的是socket.makefile()
def get_http_content(self):
content_length = 0
transfer_encoding = False
while True:
req_line = self._file.readline()
req_line = str(req_line, "utf-8")
# 遇到http头结束符
# 读取http内容
if req_line == "\r\n":
if con