自己写非阻塞代理服务器 proxy 之python版

来源(博客频道 - CSDN.NET)

From: http://blog.csdn.net/littlethunder/article/details/8960195

自己写非阻塞代理服务器 proxy 之python版

标签: 代理服务器proxy socket python tornado

2013-05-22 14:32 10558人阅读

分类: Tornado(12)

版权声明:本文为博主原创文章,未经博主允许不得转载。

刚写完上一篇的C语言版,不过瘾,把proxy改写成Python版哈。其他不说,可参见上一篇,现在就直接上代码(刚写好,新鲜出炉~):

import socket
apaaddr=('127.0.0.1',8088)
seraddr=('127.0.0.1',8080)
ser=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
apaser=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ser.bind(seraddr)
ser.listen(5)
poll=[]
while True:
	con,addr=ser.accept()
	poll.append(con)

	while len(poll):
		c=poll.pop(0)
		buf=c.recv(1024)
		if not buf:
			continue
		apaser.connect(apaaddr)
		apaser.send(buf)
		data=apaser.recv(1024)
		c.send(data)
		c.close()
		apaser.close()


这就是Proxy,也是非阻塞的哈~这就展现出Python的强大,C语言需要50多行,python只需要20多行。服务器还是和上一篇一样用python模拟,如下:

import tornado.web
import tornado.ioloop
from tornado.options import options,define,parse_command_line

define('port',default=8088,help='run this port',type=int)

class MainHandler(tornado.web.RequestHandler):
	def get(self):
		self.render('./a.html')

parse_command_line()
app=tornado.web.Application(
	[
		('/',MainHandler),
	],
)
app.listen(options.port)
tornado.ioloop.IOLoop.instance().start()


a.html也是和上篇一样的,为了测试效果统一:

<html>
	<head>
		<title>haha</title>
	</head>
	<body>
		This is a message from proxy.
	</body>
</html>


测试结果如下:

python模拟的server端:



python重写的proxy(没有终端下的输出我截这个图干神马。。。):



浏览器显示:



写完收工。

转载请注明:转自 http://blog.csdn.net/littlethunder/article/details/8960195

Link: http://www.asm32.net/article_details.aspx?id=7247


浏览次数 0 发布时间 2017/6/29 23:59:50 从属分类 Python 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | Python | 书签 | ASP.Net书签 | 京ICP备09029108号-1