我正在编写用于连接浏览器和网站的python套接字代理,但是我不知道如何处理HTTPS内容。 我建立了一个本地套接字服务器,以接收来自浏览器的请求,但是它向该套接字发送“ CONNECT ...”消息,因此我将connect()连接到目标站点,并向浏览器返回“ HTTP / 1.1 200建立连接”。 然后浏览器将加密的消息发送到套接字服务器,我无法解密它。我不知道浏览器如何在没有目标网站证书的情况下对其进行加密。 那么我该如何处理呢? connect()方法之后该怎么办? 这是我的代码。
import socket
from functions import get_addr_from_request
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 1081))
server.listen(5)
while True:
browser, addr = server.accept()
req = browser.recv(1024)
host, port = get_addr_from_request(req) # It returns ('www.google.com', 443)
if req.startswith(b'CONNECT'):
s = socket.socket()
try:
s.connect((host, port))
except socket.error as e:
print(e); break
browser.send(b'HTTP/1.1 200 Connection established\r\n\r\n')
# browser.setblocking(0)
# s.setblocking(0)
while True:
req = browser.recv(1024)
print(b'req: ' + req)
s.send(req)
res = s.recv(1024)
print(b'res: ' + res)
browser.sendall(res)