Python入门:python实现http透明代理(三)
2016-09-02 10:47
155 查看
import socket import threading import re import select import queue class Proxy(threading.Thread): def __init__(self,ser): self.conn,self.clientAdd = ser.accept() self.BUFSIZE = 1024 self.host = None self.method = None self.r_host = None self.port = None threading.Thread.__init__(self) self.q = [] def getRequest(self): data = self.conn.recv(self.BUFSIZE) #print('---------' + data.decode()) if data.decode() != '': s = data.decode().find('\r\n') firstLine = data[:s] #print('>>>>' + firstLine.decode()) self.method,self.r_host,p = firstLine.split() print(self.r_host) self.q.append(self.r_host.decode()) print(len(self.q)) net = self.r_host.decode().split('/')[0] + '//' + self.r_host.decode().split('/')[2] targetAddr = self.getTargetInfo(self.r_host.decode().split('/')[2]) newRequest = data.decode().replace(net,'') #print(newRequest) self.target = socket.socket() self.target.connect(targetAddr) self.target.send(newRequest.encode()) self.noblocking() else: return None def noblocking(self): inputs = [self.conn,self.target] while True: readable,writeable,err = select.select(inputs,[],inputs,3) if err: break ''' if readable[0] is self.conn: d = readable[0].recv(self.BUFSIZE) self.target.send(d) elif readable[1] is self.target: d = readable[1].recv(self.BUFSIZE) self.conn.send(d) ''' try: for r in readable: #print(r) d = r.recv(self.BUFSIZE) if d: if r is self.conn: self.target.send(d) elif r is self.target: self.conn.send(d) else: break except: break self.conn.close() self.target.close() def getTargetInfo(self,host): port = 0 site = None if ':' in host: tmp = host.split(':') site = tmp[0] port = int(tmp[1]) else: site = host port = 80 return site,port def run(self): self.getRequest() def serSocket(): HOST = '' PORT = 8088 ser = socket.socket() ser.bind((HOST,PORT)) #启动代理 ser.listen(5) return ser if __name__ == '__main__': ser = serSocket() while True: Proxy(ser).start()
相关文章推荐
- Python入门:python实现http透明代理
- Python入门:python实现http透明代理(二)
- Python模块学习 ---- httplib HTTP协议客户端实现
- Python入门:类的继承与实现
- [原创]用python检测LVS real server状态实现HTTP高可用
- python多线程http下载实现示例
- 转:Python模块学习 ---- httplib HTTP协议客户端实现
- python中httplib实现长连接
- python入门篇1:基于flask的留言板网站实现
- HTTP长连接实现“服务器推”的技术快速入门及演示示例
- HTTP长连接实现“服务器推”的技术快速入门及演示示例
- 06_android入门_采用HttpURLConnection的POST方式实现登陆案例
- Python模块学习 ---- httplib HTTP协议客户端实现
- Python学习一、 Http协议客户端实现
- Python模块学习 ---- httplib HTTP协议客户端实现
- (转)Python中实现带Cookie的Http的Post请求
- D-Bus入门(四)——QTDBUS代码,实现ofono代码下的python测试文件activite-context的功能
- Python模块学习 ---- httplib HTTP协议客户端实现
- Python:httplib模块用于HTTP协议客户端实现
- Python HTTP客户端如何实现自定义Cookie