文档章节

python实战--Http代理服务器

t
 tanj123
发布于 2016/08/16 17:22
字数 210
阅读 47
收藏 0
点赞 0
评论 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
博文 69
码字总数 52363
作品 0
丰台
程序员
Centos下安装Shadowsocks代理服务

背景: 朋友的服务器在美国,操作系统是centos6.7。为了实现进入外网的需求,希望把这台服务器当作代理服务器。而这台服务器上有ipv6地址,又希望通过ipv6实现代理服务。 1:python环境准备。...

余二五 ⋅ 2017/11/15 ⋅ 0

python 爬虫urllib基础示例

环境使用python3.5.2 urllib3-1.22 下载安装 wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz tar -zxf Python-3.5.2.tgz cd Python-3.5.2/ ./configure --prefix=/usr/loc......

super李导 ⋅ 05/30 ⋅ 0

grpc| python 实战 grpc

date: 2018-5-15 22:12:32 title: grpc| python 实战 grpc description: 只要代码可以跑起来, 很多难题都会迎刃而解. so, keep coding and stay hungry. 之前用 swoole 写 server 时就接触过...

daydaygo ⋅ 05/16 ⋅ 0

福利 | Python专场竞技,这些书给你加把力!

端午节将至,各地龙舟备战竞技,粽子部队也整装待发。小编掐指一算,这种热闹的时节,是时候展现真正的技(fu)术(li)了! (“Python号”龙舟闪亮登场!) Python作为当下最流行的编程语言...

⋅ 06/15 ⋅ 0

156个Python网络爬虫资源,妈妈再也不用担心你找不到资源了

本列表包含Python网页抓取和数据处理相关的库。 前几天有私信小编要Python的学习资料,小编整理了一些有深度的Python教程和参考资料,从入门到高级的都有,文件已经打包好了,正在学习Pytho...

雁横 ⋅ 05/02 ⋅ 0

python开源工具列表【持续更新】

以下是个人在工作中整理的一些python wheel,供参考。 这个列表包含与网页抓取和数据处理的Python库 网络 通用urllib -网络库(stdlib)。 requests -网络库。 grab – 网络库(基于pycurl)。...

武耀文 ⋅ 04/25 ⋅ 0

Python程序员专栏欢迎您的投稿

1、关于投稿 关注我们Python程序员知乎专栏:https://zhuanlan.zhihu.com/pythoncxy 的小伙伴已经快2w人啦,很感谢大家对我们的支持!我们专栏现在欢迎各位写Python文章的作者投稿,只要你玩...

Python爱好者社区 ⋅ 06/12 ⋅ 0

高级爬虫(一):Scrapy爬虫框架的安装

Hi 小伙伴们差不多有半个月没有更新干货了,一直有点忙,而且这中间还有曲折过程,也就没有更新文章. 但今天无论如何也要更新一篇文章,接下来是爬虫高级篇重点讲解的地方! 最近会连载Scrap...

Python绿色通道 ⋅ 04/22 ⋅ 0

Python3爬虫视频学习教程

大家好哈,现在呢静觅博客已经两年多啦,可能大家过来更多看到的是爬虫方面的博文,首先非常感谢大家的支持,希望我的博文对大家有帮助! 最近,主要的任务就是开发性感美女图片大全,使用p...

yangjiyue0520 ⋅ 2017/11/18 ⋅ 0

云计算学习大纲是什么?怎么学习云计算?

《2018×××Linux云计算架构师+Python运维开发课程》十大阶段的课程为由浅入深、循序渐进的完整课程体系,包括结合Linux的网络基础实战、Linux系统配置及服务深度解析、Shell脚本自动化运维...

长沙千锋 ⋅ 04/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Thrift RPC实战(二) Thrift 网络服务模型

TServer类层次体系 TSimpleServer/TThreadPoolServer是阻塞服务模型 TNonblockingServer/THsHaServer/TThreadedSelectotServer是非阻塞服务模型(NIO) 1 TServer抽象类的定义 内部静态类Args的...

lemonLove ⋅ 10分钟前 ⋅ 0

vim命令用法

第五章 vim命令 vim和vi几乎是一样的,唯一的区别就是当编辑一个文本时,使用vi不会显示颜色,而使用vim会显示颜色。 vim有三个模式:一般模式,编辑模式,命令模式。 系统最小化安装时没有安...

弓正 ⋅ 12分钟前 ⋅ 0

MyBatis源码解读之配置

1. 目的 本文主要介绍MyBatis配置文件解析,通过源码解读mybatis-config.xml(官方默认命名)、Mapper.xml 与Java对象的映射。 2. MyBatis结构 查看大图 MyBatis结构图,原图实在太模糊了,所以...

无忌 ⋅ 15分钟前 ⋅ 0

Ignite的jdbc与网格的连接方式的查询性能对比

环境: 数据量100万 Ignite2.5 Windows10 8g jdbc方式连接 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; i......

仔仔1993 ⋅ 30分钟前 ⋅ 0

收集自网络的wordpress 分页导航的代码教程(全网最全版)

wordpress 分页导航是用来切换文章的一个功能,添加了 wordpress 分页导航后,用户即可自由到达指定的页面数浏览分类文章,而这样的一个很简单功能却有很多朋友在用插件:WP-PageNavi,插件的...

Rhymo-Wu ⋅ 46分钟前 ⋅ 0

微服务 WildFly Swarm 入门

Hello World 就像前面章节中的其他框架一样,我们希望添加一些基本的 Hello-world 功能,然后在其上逐步添加更多的功能。让我们从在我们的项目中创建一个 HolaResources 开始。您可以使用您的...

woshixin ⋅ 53分钟前 ⋅ 0

Maven的安装和Eclipse的配置

1. 下载Maven 下载地址 2. 解压压缩包,放到自己习惯的硬盘中 此处我将其放到了 D:\Tools 目录下。 3. 配置环境变量 右键此电脑 -> 属性 -> 高级系统设置 -> 环境变量。 在系统变量中新建,变...

影狼 ⋅ 今天 ⋅ 0

python pip使用国内镜像的方法

国内源 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://......

良言 ⋅ 今天 ⋅ 0

对于url变化的spa应该如何使用微信jssdk

使用vue单页面碰上微信jssdk config验证失败的坑。第一次成功 之后切换页面全部失败,找到了解决方法,第一次验证成功后保存验证信息 切换页面时验证信息直接拿来用,加一个wx.error() 失败时...

孙冠峰 ⋅ 今天 ⋅ 0

Spring Cloud Gateway 一般集成

SCF发布,带来很多新东西,不过少了点教程,打开方式又和以前的不一样,比如这个SCG,压根就没有入门指导,所以这里写一个,以备后用。 一、集成 pom.xml <dependency> <groupI...

kut ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部