我到处寻找并发现了数以百万计的python代理服务器,但没有一个正是我想要的(我想:s)
我一般都对python有过一些经验,但我对HTTP协议的深层秘密世界还很陌生。
我认为可能有用的是一个非常简单的代理示例,它可以连接到,然后它自己会尝试连接到传递给它的地址。
此外,我认为令我困惑的是隐藏的东西正在做的一切,例如如果该类继承自BaseHTTPServer.BaseHTTPRequestHandler,那么在请求页面时会发生什么样的事情,就像在许多示例中我发现没有引用路径变量那么突然噗! self.path用于函数中。我假设它已被继承,但它最终如何使用所使用的路径?
我很抱歉,如果这没有多大意义,因为我对我的问题的想法可能会被扰乱:(
如果您能想到任何可以让我的问题更清楚的事情,请建议我添加它。 XXX
编辑:
此外,代理处理请求的详细过程的说明链接,请求页面(此时如何读取/修改数据)并将其传递给原始请求者将非常感谢xxxx < / p>
答案 0 :(得分:28)
“一个非常简单的代理示例,可以连接到,然后它自己会尝试连接到传递给它的地址。”这实际上是HTTP代理的定义。
这里有一个真正的简单代理示例:http://effbot.org/librarybook/simplehttpserver.htm
它的核心只有3行:
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
self.copyfile(urllib.urlopen(self.path), self.wfile)
所以它是SimpleHTTPRequestHandler
,响应GET请求,打开路径中的URL(对代理的请求通常看起来像“GET http://example.com/”,而不是像“GET / index” html的“)。然后它只是将从该URL读取的任何内容复制到响应中。
请注意,这真的最小。我相信它根本不涉及标题。
BTW:path
记录在http://docs.python.org/library/basehttpserver.html。它是在调用do*
方法之前设置的。
答案 1 :(得分:13)
来自twisted Wiki
from twisted.web import proxy, http
from twisted.internet import reactor
from twisted.python import log
import sys
log.startLogging(sys.stdout)
class ProxyFactory(http.HTTPFactory):
protocol = proxy.Proxy
reactor.listenTCP(8080, ProxyFactory())
reactor.run()
答案 2 :(得分:4)
proxpy看起来很有前途,调整请求和回复非常简单。