文档章节

python实战--Http代理服务器

t
 tanj
发布于 2016/08/16 17:22
字数 210
阅读 47
收藏 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新世界
07/19
0
0
Python通过代理多线程抓取图片

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

lj2007331
2013/07/15
0
0
python web 部署:nginx + gunicorn + supervisor + flask

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

劲风online
2015/11/06
0
0
买《Python从小白到大牛》专题视频课程,送配套纸质图书

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

tony关东升
07/23
0
0
CentOS6.4下源代码安装openERP以及nginx配置

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

小笔头
2013/07/07
0
1

没有更多内容

加载失败,请刷新页面

加载更多

io流

码农屌丝
19分钟前
0
0
SpringBoot基础篇之重名Bean的解决与多实例选择

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 当通过接口的方式注入Bean时,如果有多个子类的bean存在时,具体哪个bean会被注入呢?系统中能否存在两个重名的bean呢?如果可以,那么怎么...

小灰灰Blog
29分钟前
0
0
记录一次dubbo项目实战

一、案例说明 存在2个系统,A系统和B系统,A系统调用B系统的接口获取数据,用于查询用户列表。 二、环境搭建 安装zookeeper,解压(zookeeper-3.4.8.tar.gz)得到如下: 然后进入conf将zoo_s...

Java烂猪皮
33分钟前
0
0
拜托,别再问怎么深入学习分布式架构了!

由于分布式系统所涉及到的领域众多,知识庞杂,很多新人在最初往往找不到头绪,不知道从何处下手来一步步学习分布式架构。 本文试图通过一个最简单的、常用的分布式系统,来阐述分布式系统中...

Java架构资源分享
34分钟前
0
0
《netty入门与实战》笔记-05:心跳与空闲检测

本小节,我们一起探讨最后一个话题:心跳与空闲检测 首先,我们来看一下,客户端与服务端之间的网络会存在什么问题? 1. 网络问题 下图是网络应用程序普遍会遇到的一个问题:连接假死 连接假...

Funcy1122
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部