我使用Python扭曲库将客户端请求发送到Web服务器。我使用twisted而不是请求,因为Web服务器是恶意软件命令和控制服务器,并且请求必须遵循非常严格的规则:例如,标头序列必须正确。请求不会让我选择确定这一点。扭曲,这是有效的。但是,我真的不需要扭曲的异步开销 - 但必须遵循它,所以我可以使用它...我现在的主要问题是在处理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无法重启。这可能是一个非常愚蠢的问题,但如何解决呢?