使用twisted.web实现代理服务器

简单的实现谷歌的代理:

架构就是下面这么简单。

=================

my server outside GFW  |    <----------------------> your browser  visit my server at port 8080

=================

代码如下:

#coding=utf-8
from twisted.web import resource, server
from twisted.internet import reactor,endpoints
from twisted.python import log
import urllib2
import urllib
import sys
log.startLogging(sys.stdout)

class router(resource.Resource):
    def getChild(self, path, request):
        url = r‘https://www.google.com‘
        if path=="":
            return Index(url)
        else:
            return Index(url+ request.uri)

class Index(resource.Resource):
    def __init__(self, url):
        self.url = url

    def render_GET(self, request):
        req = urllib2.Request(self.url)
        res = urllib2.urlopen(req)
        return res.read()

rsc = router()
f = server.Site(rsc)
endpoints.serverFromString(reactor, ‘tcp:8001‘).listen(f)
reactor.run()

 

使用上面代码有一个问题,谷歌对于被爬是不爽的。因此需要伪装下,加上一个headers参数给request请求。

headers = {‘User-Agent‘:‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘}
req = urllib2.Request(self.url, headers=headers)

这样就解决了403问题。那么接下来只要变成一个系统后台任务就可以了。

时间: 2024-10-19 11:46:07

使用twisted.web实现代理服务器的相关文章

Twisted web开发教程

最近在网上看到一篇twisted web开发文章,将它实践了一下,twisted 提供基本的url路由 和 控制器,模板与模型需要外部扩展 1.目录浏览 2.get请求 3.url路由 4.接受带参数的get请求 5.获取和过期session 获取session 手动设置session过期 再获取一次看是否过期 5-1.session实现一个页面计数器 5.2 移除session 6.get与post请求,表单编写

Twisted的WEB开发

1   简介 在WEB开发中,偶尔需要对HTTP协议更多底层细节进行控制,这时的django/web.py等等显然无法满足要求,所以只好求助于Twisted了.使用Twisted进行WEB开发,其实更合适的叫法应该是基于HTTP服务器的开发,因为Twisted相对底层,所以可以控制的东西也比较底层. 在Twisted的技术体系中,这个WEB开发实际上要涉及到HTTPChannel.HTTPFactory.Request三个层次的开发,以下详诉. HTTP协议参考 RFC2616 . 2   Tw

twisted 5 web client

打印某个URL返回的内容 from twisted.internet import reactor from twisted.web.client import getPage import sys def printPage(result):     print result def printError(failure):     print >>sys.stderr, failure def stop(result):     reactor.stop() if len(sys.argv

twisted 4 non block web server

from twisted.internet import  reactor from twisted.internet.task import deferLater from twisted.web.resource import Resource from twisted.web.server import Site, NOT_DONE_YET import time class BusyPage(Resource):     isLeaf = True     def _delayedRen

flask twisted 结合方案

from flask import Flask, render_template, g app = Flask(__name__) @app.route("/") def index(): return render_template("index.html") # run in under twisted through wsgi from twisted.web.wsgi import WSGIResource from twisted.web.server i

为什么 Node.js 这么火,而同样异步模式 Python 框架 Twisted 却十几年一直不温不火?

twisted是一个强大的异步网络框架,应用的面也非常广,但是没有这几年才出现的Node.js火,社区.文档也是很少可怜我觉得二者其实在本质上差不多,而且python使用起来还是比较容易一些的 匿名用户 因为,它给了一大部分程序猿幻觉比如前后端统一,脚本也能性能很屌,做Demo搜搜快什么的,但实际上,这仅仅是幻觉罢了…… 正是因为这样的幻觉是“看得到”的,又有一个响当当的干爹Google,因此Node的曝光率远高于后端常规语言就不足为奇了. 论速度,你一个带JIT的跟常规脚本语言的虚拟机比,没到

pypy with twisted vs nodejs

看到网上都说nodejs处理并发请求速度很快.对比了一下pypy + twisted 单线程模型下 pypy+twisted完胜 nodejs 最少比nodejs快2倍以上 nodejs 结果: Benchmarking 127.0.0.1 (be patient)Completed 4000 requestsCompleted 8000 requestsCompleted 12000 requestsCompleted 16000 requestsCompleted 20000 request

Nginx作为反向代理服务器

前言:Nginx通过proxy模块实现反向代理功能.在作为web反向代理服务器时,nginx负责接收客户请求,并能够根据URI.客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server).nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上.如下面的示例中,location的/uri将被替换为上游服务器上的/newuri. 实验环境: 192.168.2.168 nginx 192.1

Twisted

Twisted定义 Twisted是一个基于事件驱动的网络引擎框架 网络框架,别人预先定义好的一个框架(一个项目),如.net某个web框架有25个class,从BeginRequest依次执行类里的process方法,程序员自己定义一个类,添加到框架里,应用程序从上到下运行,就会执行自定义代码.框架只知道这个类的列表,不关心你写了什么内容,从上到下执行,类似于一个执行链,C#里叫委托链.也就是把代码类放到这个列表中,委托这个框架替你执行. 事件驱动(not event),把自定义代码注册到框架