Создание собственного прокси-сервера в Python. Соединение между клиентом и прокси, а также между сервером и прокси установлено успешно. Однако, когда я, например, refre sh веб-страницу, я не получаю никаких данных при использовании recv ().
class Proxy_server_connection(Thread):
def __init__(self, host, port):
super(Proxy_server_connection, self).__init__()
self.client = None
self.port = port
self.host = host
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.connect((host, port))
def run(self):
while True:
data = self.server.recv(4096)
print ("prox_server: ", data)
if data:
self.client.sendall(data)
class Proxy_client_connection(Thread):
def __init__(self, host,port):
super(Proxy_client_connection, self).__init__()
self.server = None
self.port = port
self.host = host
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(1)
self.client, addr = s.accept()
def run(self):
while True:
data = self.client.recv(4096)
print ("prox_client: ", data)
if data:
self.server.sendall(data) #socket connected to real server
class Proxy(Thread):
def __init__(self, from_host, to_host, port):
super(Proxy, self).__init__()
self.from_host = from_host
self.to_host = to_host
self.port = port
def run(self):
while True:
print (("[proxy({})] setting up").format(self.port))
self.pc_connection = Proxy_client_connection(self.from_host, self.port)
#pick out url
data = self.pc_connection.client.recv(4096).decode()
host_word_len = 6
url_start = data.find("Host: ", 0, len(data)-1)
url_end = data.find("\r\n", url_start, len(data)-1)
url = data[url_start + host_word_len:url_end]
HTTP_PORT = 80
self.ps_connection = Proxy_server_connection(url, HTTP_PORT)
print(("[proxy({})] connection established").format(self.port))
self.pc_connection.server = self.ps_connection.server
self.ps_connection.client = self.pc_connection.client
self.pc_connection.start()
self.ps_connection.start()
master_server = Proxy('0.0.0.0', '127.0.0.1', 12345)
master_server.start()
Когда я запускаю прокси и обновляю веб-страницу, это результат:
[proxy(12345)] setting up
[proxy(12345)] connection established
[proxy(12345)] setting up
(then it takes a couple of seconds in between)
prox_server: b''
prox_server: b''
prox_server: b''
etc.
Итак, по какой-то причине он застревает в while l oop в классе Proxy_server_connection, поскольку никогда не получает никаких данных. Что я делаю не так с этим прокси?