Python Twisted代理 - 如何拦截数据包

7 投票
1 回答
7690 浏览
提问于 2025-04-17 11:57

我正在尝试用Python打印出HTTP响应的内容。

这是我到目前为止写的代码:

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()

当我在浏览器中连接到localhost:8080时,我可以看到我所有的请求都通过本地运行的Python代理进行处理。但是我该怎么做才能 1) 打印出响应内容,以及 2) 在把它发送回浏览器之前编辑这个响应内容呢?

希望有人能给我指个方向 - 请记住,我对Python非常陌生!

1 个回答

10

重写一个协议的 dataReceived 方法(在你的情况下是 proxy.Proxy),然后在这个方法里处理数据的修改:

from twisted.web import proxy, http
from twisted.internet import reactor
from twisted.python import log
import sys

log.startLogging(sys.stdout)

class MyProxy(proxy.Proxy):
    def dataReceived(self, data):

      # Modify the data here
      print data

      # perform the default functionality on modified data 
      return proxy.Proxy.dataReceived(self, data)

class ProxyFactory(http.HTTPFactory):
  protocol=MyProxy

factory = ProxyFactory()
reactor.listenTCP(8080, factory)
reactor.run()

撰写回答