认真简单的python HTTP代理?

jma*_*jma 23 python proxy http

我到处寻找并发现了数以百万计的python代理服务器,但没有一个正是我想要的(我想:s)

我一般都对python有过相当多的经验,但我对HTTP协议深层暗秘的世界还很陌生.

我认为可能有用的是一个非常简单的代理示例,它可以连接到,然后它自己会尝试连接到传递给它的地址.

此外,我认为令我困惑的是隐藏的东西正在做的一切,例如,如果类继承自BaseHTTPServer.BaseHTTPRequestHandler请求页面时会发生什么,正如在许多示例中我发现没有引用路径变量然后突然噗!self.path用于函数中.我假设它已被继承,但它如何最终得到使用的路径?

我很抱歉,如果这没有多大意义,因为我对我的问题的想法可能是混乱的:(

如果您能想到任何可以让我的问题更清楚的事情,请建议我添加它.XXX

编辑:

此外,链接到代理处理请求的详细过程的说明,请求页面(此时如何读取/修改数据)并将其传递给原始请求者将非常感谢xxxx

Lau*_*ves 32

"一个非常简单的代理示例,可以连接到,然后自己尝试连接到传递给它的地址." 这实际上是HTTP代理的定义.

这里有一个非常简单的代理示例:http://effbot.org/librarybook/simplehttpserver.htm

它的核心只有3行:

class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.copyfile(urllib.urlopen(self.path), self.wfile)
Run Code Online (Sandbox Code Playgroud)

因此SimpleHTTPRequestHandler,响应GET请求,打开路径中的URL(对代理的请求通常看起来像"GET http://example.com/ ",而不是像"GET /index.html").然后它只是将从该URL读取的任何内容复制到响应中.

请注意,这真的很小.我相信它根本不涉及标题.

BTW:path记录在http://docs.python.org/library/basehttpserver.html.它是在do*调用方法之前设置的.

  • 对于最小的头处理(你甚至没有得到200 OK),添加`self.send_response(200)`和`self.end_headers()`作为`do_GET()`的前两行.(没有它们,'ab`认为请求失败了.) (2认同)

sal*_*sal 15

来自扭曲的维基

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()
Run Code Online (Sandbox Code Playgroud)


Dim*_*nek 5

proxpy看起来很有前途,调整请求和响应非常简单。

  • +1。如果您想要一个转发确切请求(包括标头和所有请求)的代理,但希望能够调整请求,那么您需要类似 ProxPy 的东西。 (2认同)