文档章节

python实战--Http代理服务器

t
 tanj
发布于 2016/08/16 17:22
字数 210
阅读 49
收藏 0
  1. import socket  
  2. import thread  
  3. import urlparse  
  4. import select  
  5.   
  6. BUFLEN=8192  
  7.   
  8.   
  9. class Proxy(object):  
  10.     def __init__(self,conn,addr):  
  11.         self.source=conn  
  12.         self.request=""  
  13.         self.headers={}  
  14.         self.destnation=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  
  15.         self.run()  
  16.   
  17.     def get_headers(self):  
  18.         header=''  
  19.         while True:  
  20.             header+=self.source.recv(BUFLEN)  
  21.             index=header.find('\n')  
  22.             if index >0:  
  23.                 break  
  24.         #firstLine,self.request=header.split('\r\n',1)  
  25.         firstLine=header[:index]  
  26.         self.request=header[index+1:]  
  27.         self.headers['method'],self.headers['path'],self.headers['protocol']=firstLine.split()  
  28.   
  29.     def conn_destnation(self):  
  30.         url=urlparse.urlparse(self.headers['path'])  
  31.         hostname=url[1]  
  32.         port="80"  
  33.         if hostname.find(':') >0:  
  34.             addr,port=hostname.split(':')  
  35.         else:  
  36.             addr=hostname  
  37.         port=int(port)  
  38.         ip=socket.gethostbyname(addr)  
  39.         print ip,port  
  40.         self.destnation.connect((ip,port))  
  41.         data="%s %s %s\r\n" %(self.headers['method'],self.headers['path'],self.headers['protocol'])  
  42.         self.destnation.send(data+self.request)  
  43.         print data+self.request  
  44.   
  45.   
  46.     def renderto(self):  
  47.         readsocket=[self.destnation]  
  48.         while True:  
  49.             data=''  
  50.             (rlist,wlist,elist)=select.select(readsocket,[],[],3)  
  51.             if rlist:  
  52.                 data=rlist[0].recv(BUFLEN)  
  53.                 if len(data)>0:  
  54.                     self.source.send(data)  
  55.                 else:  
  56.                     break  
  57.     def run(self):  
  58.         self.get_headers()  
  59.         self.conn_destnation()  
  60.         self.renderto()  
  61.   
  62.   
  63.   
  64. class Server(object):  
  65.   
  66.     def __init__(self,host,port,handler=Proxy):  
  67.         self.host=host  
  68.         self.port=port  
  69.         self.server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  
  70.         self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  
  71.         self.server.bind((host,port))  
  72.         self.server.listen(5)  
  73.         self.handler=handler  
  74.   
  75.     def start(self):  
  76.         while True:  
  77.             try:  
  78.                 conn,addr=self.server.accept()  
  79.                 thread.start_new_thread(self.handler,(conn,addr))  
  80.             except:  
  81.                 pass  
  82.   
  83.   
  84. if __name__=='__main__':  
  85.     s=Server('127.0.0.1',8080)  
  86.     s.start()  

本文转载自:http://blog.csdn.net/yueguanghaidao/article/details/9277331

共有 人打赏支持
t
粉丝 1
博文 99
码字总数 67156
作品 0
丰台
程序员
私信 提问
Python通过代理多线程抓取图片

Python作为一门功能强大的脚本语言,经常被用来写爬虫程序,下面是Python通过代理多线程抓取图片代码 Python爬虫多线程抓取代理服务器参考:http://www.linuxeye.com/program/1763.html 说明...

lj2007331
2013/07/15
0
0
Python爆破校园饮水机系统,喝水还要花钱?不存在的,免费饮水!

论述:此教程只做技术交流,切勿用于其它相关用途。 本人所读大学是那种环境措施等都比较好的,毕竟学费也很贵的,至于相关名称我就不说了。记得大一的时候我们还是在宿舍刷卡饮水,后面有人...

Python新世界
07/19
0
0
买《Python从小白到大牛》专题视频课程,送配套纸质图书

经过一年多时间的呕心沥血,Python立体化图书——《Python从小白到大牛》即将与大家见面了。所谓立体化图书包括:电子图书、视频、课件和服务等内容。 《Python从小白到大牛》纸质图书将于9...

tony关东升
07/23
0
0
python web 部署:nginx + gunicorn + supervisor + flask

python web 部署 web开发中,各种语言争奇斗艳,web的部署方面,却没有太多的方式。简单而已,大概都是 nginx 做前端代理,中间 webservice 调用程序脚本。大概方式: nginx 不用多说,一个高...

劲风online
2015/11/06
0
0
CentOS6.4下源代码安装以及nginx配置

以前网上有个centos下的自动安装脚本,脚本本身应该是正确的,但是可能在多人转载后,中间有信息遗漏或者丢失,所以造成脚本失败,不能直接用 我把自己在CentOS下源代码安装OE以及与nginx整合...

北方攻城师
2014/11/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TensorFlow的基础概念02

TensorFlow的计算流图 import osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#TensorFlow的计算模型,数据流图'''TensorFlow = Tensor + FlowTensor 张量 数据结构:多维数组Flo...

怪咖先生forever
14分钟前
1
0
大数据技术的发展趋势

大数据领域已经涌现出了大量新的技术,它们成为大数据采集、存储、处理和呈现的有力武器。这些技术下一步将如何发展?它们之中哪些技术将广为流行?又会诞生哪些新的技术? 技术趋向多样化,...

董黎明
30分钟前
7
0
藏在正则表达式里的陷阱

前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。 我们可以看到所...

前端小攻略
32分钟前
3
0
关联更新,关联查询

关联更新 update A,B SET A.c1=B.c1,A.c2=B.c2 where A.id=B.id and ... update A inner join on A.id=B.id set A.c1=B.c1,A.c2=B.c2 where... 关联查询 交叉连接(cross join),内连接(inner ......

关元
35分钟前
3
0
django的环境搭建及启用

Pycharm社区版不像商业版那样可以直接创建django工程,需要通过一下步骤创建: 新建一个用于Django开发的虚拟环境 打开命令窗口 新建虚拟环境: conda create -n env_name python=3.6 查看系...

davidwbnu
36分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部