Python Twisted: 2个连续的同步请求?

2024-10-03 23:24:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python twisted库将客户机请求发送到web服务器。我使用twisted而不是requests,因为web服务器是一个恶意软件命令和控制服务器,请求必须遵循非常严格的规则:例如,头的序列必须正确。请求没有给我决定这个的选项。有了twisted,就可以了。然而,我并不需要twisted的异步开销,而是必须遵循它,这样我就可以使用它。。。我现在的主要问题是,在1(同步)请求被处理后,我不能再发送第二个请求,因为反应堆停止运行,无法重新启动。。。第二个反应堆就不能建立了。但这是一个如此简单的任务,一定有办法吗?我当前的代码基本上是:

class WebClientContextFactory(ClientContextFactory):
  def getContext(self, hostname, port):
    return ClientContextFactory.getContext(self)

receivedData = None

def cbBody(body):
    global receivedData
    receivedData = body

def cbResponse(response):
    d = readBody(response)
    d.addCallback(cbBody)
    return d

class DataProducer(object):

    def __init__(self, body):
        self.body = body
        self.length = len(body)

    def startProducing(self, consumer):
        consumer.write(self.body)
        return defer.succeed(None)

    def pauseProducing(self):
        pass

    def stopProducing(self):
        pass

....

contextFactory = WebClientContextFactory()
agent = Agent(reactor, contextFactory)

....
d = agent.request('POST', url, Headers(headers), DataProducer(postData))
d.addCallbacks(cbResponse, err)
d.addCallback(lambda ignored: reactor.stop())
reactor.run()
reply = receivedData

最后5行在稍后的第二个请求中被重复,但是我得到一个错误,reactor不可重启。这可能是一个非常愚蠢的问题,但如何解决呢?在


Tags: self服务器nonewebreturndeftwistedbody