如何在Python Sockets中加密HTTP请求?附示例代码解析
在Python Sockets中实现HTTP请求加密
我来给你展示如何用Python的socket和ssl模块实现加密的HTTP请求,这里有个实际的示例——它会连接postlm.com的443端口,处理CONNECT请求并将其转换为GET请求,最终完成加密HTTP请求的操作:
import socket import ssl host = 'postlm.com' port = 443 def pp(request): # 创建基础套接字并包装为SSL加密套接字 s = socket.socket() s = ssl.wrap_socket(s) s.connect((host, port)) s.send(request) response = b'' for _ in range(2): chunk = s.recv(10240) if not chunk: break print('='*100) # 检测到连接建立响应后,转换请求类型并重发 if b'Connection established' in chunk: modified_request = request.replace(b'CONNECT ', b'GET https://') s.send(modified_request) continue response += chunk break s.close() return response if __name__ == '__main__': # 构造一个完整的CONNECT请求示例 connect_request = b'CONNECT www.wikipedia.org:443 HTTP/1.1\r\nHost: www.wikipedia.org\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36\r\n\r\n' result = pp(connect_request) # 打印响应内容(忽略编码兼容问题) print(result.decode('utf-8', errors='ignore'))
代码核心逻辑说明:
- 先用
socket.socket()创建基础网络套接字,再通过ssl.wrap_socket()将其升级为SSL/TLS加密套接字,实现传输层加密 - 连接目标服务器的443端口(HTTPS协议默认端口)
- 发送初始CONNECT请求,当收到服务器返回的
Connection established响应时,将请求替换为GET格式并重新发送 - 接收并拼接服务器返回的响应数据,完成后关闭连接
内容的提问来源于stack exchange,提问作者Smart Manoj




