You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动