这些天闲来无事就研究了下HTTP代理原理,顺便用Python做了个很挫的程序。
import socket
import threading
class ProxyServer():
def __init__(self):
self.ListenSock = socket()
self.ListenSock.bind()
self.Clients = []
def listen_thread(self):
self.ListenSock.listen()
while(1):
self.Clients.append(ProxyClient(self.ListenSock.accpet())
def start_work(self):
start listen_thread
while(1):
#从内存中踢出已经断开的连接
for i in self.client:
if i not alive:
self.clients.remove(i)
class ProxyClient():
def __init__(self,Csock):
self.Csock = Csock
self.Rsock = None
start request_process_thread
def request_process_thread(self):
while(1):
req = self.Csock.recv()
#客户端断开了
if req == '':
return
#从请求中获得客户端想要访问的地址
addr = get addr from req
if self.Rsock == None:
self.Rsock.connect(addr)
#把客户端的请求转出去
self.Rscok.send(req)
#开启接受web data的线程,把web data转发给客户端
start recv_web_data_thread
else:
#如果连接已经建立就不要再去创建新的
self.Rsock.send(req)
def recv_web_data_thread(self):
while(1):
data = self.Rsock.recv()
if data=='':
return
#把web data转发给客户端
self.Csock.send(data)