我想做一个GET请求来检查返回码是否是我期望的。这个请求发生在通用延迟链的addCallback所调用的函数内部,如下面的代码所示。如何做一个HTTP请求延迟在另一个(级联延期)?
我的具体问题如果:如何使行的返回-D-到达行-E-?
似乎从未调用回调函数“cbResponse”(行-D-)。我的第一次尝试是请求并返回到回调链请求的结果(行-A-)。它失败了,因为延期对象没有属性结果。 第二次尝试(行-B-),返回延迟对象本身。它也不会返回结果。 第三次尝试(行-C-),whas返回任何东西,但它显然没有请求的响应代码。
非常感谢!
from twisted.web.client import Agent
from twisted.web.http_headers import Headers
from twisted.internet import reactor, defer
class Test (object):
@classmethod
def getRequest (self, result):
print "Function getRequest"
agent = Agent(reactor)
d2 = agent.request('GET',
'http://www.google.com',
Headers({'User-Agent': ['Twisted Web Client Example']}),
None)
d2.addCallback(Test.cbResponse)
# 1 st attempt: return the result of d2. Fail: exceptions.AttributeError: Deferred instance has no attribute 'result'
return d2.result # --> line A
# 2nd attempt: return only the deferr object d2. Don't fail, but I can't get the result of the above request
### return d2 # --> line B
# 3rd attemp: return None (without return).
# --> line C
@classmethod
def cbResponse(response):
print 'Function cbResponse %s', response.code
# This is the return value I want to pass back to deferredChain function (called at line E)
return response.code # line --> D
@classmethod
def deferredChain(self):
d = defer.Deferred()
d.addCallback(Test.getRequest) # line --> E
d.callback("success")
return d.result # line --> F
if __name__ == '__main__':
tst = Test()
rtn = tst.deferredChain()
print "RTN: %s " % rtn
请重新解释一下这个问题,因为不清楚问题是什么以及问题是什么。 – pinturic
对不起@ pinturic,我做了一个调整。请看现在是否清楚。 –