文档章节

python实战--Http代理服务器

t
 tanj123
发布于 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
博文 94
码字总数 59540
作品 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从小白到大牛》专题视频课程,送配套纸质图书

经过一年多时间的呕心沥血,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下源代码安装openERP以及nginx配置

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

小笔头
2013/07/07
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

sklearn中predict_proba用法(注意和predict的区别)

参考网址:https://blog.csdn.net/m0_37870649/article/details/79549142 # 返回预测标签 print(clf.predict(x_test)) # 返回预测属于某标签的概率 print(clf.predict_proba(x_test))...

小叮当_加V
3分钟前
0
0
docker swarm创建consul集群

version: '3.6'x-consul: &consul image: consul:latest volumes: - consul:/consulvolumes: consul:services: client: <<: *consul ports: - "8500:......

weidedong
5分钟前
0
0
Git客户端(TortoiseGit)基本使用详解

1、 环境安装 Git最新版下载地址:https://gitforwindows.org/ TortoiseGit,Git客户端,32/64位最新版及对应的语言包下载地址:https://tortoisegit.org/download/ 安装的方法,一直下一步就...

hblt-j
11分钟前
0
0
服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka

这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,keepalive 连接心跳 可配支持...

lemonLove
11分钟前
0
0
1、ElasticSearch的安装配置和使用

一、安装 按照个人习惯我习惯把自己的软件都安装到opt下 解压 tar -zxvf elasticsearch-6.3.2.tar.gz 重命名 mv elasticsearch-6.3.2.tar.gz esearch 移动 mv elasticsearch-6.3.2.tar.gz /o...

丑陋的皮囊
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部