Python socket怎么解析HTTP请求内容
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容主要讲解"Python socket怎么解析HTTP请求内容",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python socket怎么解析HTT
千家信息网最后更新 2025年02月01日Python socket怎么解析HTTP请求内容
本篇内容主要讲解"Python socket怎么解析HTTP请求内容",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python socket怎么解析HTTP请求内容"吧!
socket解析HTTP请求内容
思路
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 content_length != 0: content = self._file.read(content_length) content = str(content, "utf-8") self._content = content return None if transfer_encoding: content = "" self._file.readline() while True: line = self._file.readline() line = str(line, "utf-8") if line == "0\r\n": sub_line = self._file.readline() sub_line = str(sub_line, "utf-8") if sub_line == "\r\n": self._content = content return None else: content += line continue self._content = False # 头文件没有结束 # 并且没有找到关于内容大小的字段 else: if content_length == 0 and transfer_encoding is False: words = req_line.split() if words[0] == "Content-Length:": content_length = int(words[1]) if words[0] == "Transfer-Encoding:": transfer_encoding = True self._content = False
socket 模拟http请求
# coding: utf-8import socketfrom urllib.parse import urlparsedef get_url(url): url = urlparse(url) host = url.netloc path = url.path if path == "": path = "/" # 建立 socket 连接 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((host, 80)) client.send("GET {} HTTP/1.1\r\nHost:{}\r\nConnection:close\r\n\r\n".format(path, host).encode("utf-8")) data = b"" while True: d = client.recv(1024) if d: data += d else: break data = data.decode("utf-8") html_data = data.split("\r\n\r\n")[1] print(html_data) client.close() passif __name__ == '__main__': get_url("http://www.baidu.com")
到此,相信大家对"Python socket怎么解析HTTP请求内容"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
内容
utf-8
参数
大小
结束符
代码
头部
学习
实用
更深
一行
代表
兴趣
字段
字节
实用性
实际
思路
操作简单
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全宣传周手抄报时代少年团
安徽质量软件开发价格服务标准
安全代理服务器品牌
笔记本网络安全密钥在哪
服务器微码
ios软件开发需要4级吗
数据库实现环形队列
网络安全工程师认证有
服务器测试流程
数据库报错1856
石化行业数据库审计系统厂家
网络安全等级保护中级考试
通过api查询数据库
方舟私人服务器下线保护
网络技术行业怎么样
计算机网络技术展望
软件开发过程结课
地下城读取服务器慢
网络安全架构徐云峰
计算机网络技术能够干什么
lte自组织网络技术ppt
服务器开机时间是什么意思
网络安全宣传周 安徽
基础信用信息数据库
校园服务器虚拟化价格
两种数据库
恩科网络技术有限公司
有偿软件开发
e gpon网络安全
软件开发系统维护处理设计